JavaScript学习(1)——Var变量&对象

这个变量是一个动态类型,可以在多个类型中转换
JS只用一种数字类型,数字可以带小数点,可以不带。
数字
极大极小的数字可以通过科学计数法书写。
示例:
var y=123e5 //12300000 var z=123e-5 //0.00123
布尔型
JS数组
如何创建数组

var cars=new Array();
cars[0]="Audi";
cars[1]="BMW";
cars[2]="Volvo";

或者

var cars=new Array("Audi","BMW","Volvo");

或者

var cars=["Audi','BMW","Volvo"];

可以通过索引的length赋值来导致array的大小变化:

var arr = [1, 2, 3];
arr.length; //3
arr.length = 6;
arr; //[1, 2, 3, undefined, undefined, undefined]
arr.length = 2;
arr; // arr现在变为['A', 99, 'C']

如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:

var arr = [1, 2, 3];
arr[5] = 'x';
arr; // [1, 2, 3, undefined, 'x']

也可以用indexOf来搜索一个指定元素的位置:

var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10); // 元素10的索引为0
arr.indexOf(20); // 元素20的索引为1
arr.indexOf(30);// 元素30没有找到,返回-1

当元组中有多个相同元素时,该方法只能查找到第一个元素所在的位置。

slice()是对应string的substring()版本, 它截取Array的部分元素,然后返回一个新的Array:

var arr = ['A', 'B', 'C', 'D', 'E', 'F'];
arr.slice(0,3);  //从索引0开始到索引3介绍,但不包括索引3
arr.slice(3);// 从索引3开始到结束:['D', 'E', 'F', 'G']

slice的启止参数包括开始索引,不包括结束索引。
如果不给slice()传递任何参数, 它就会从头到尾截取所有元素。利用这一点,我们可以很容易的复制一个Array

var arr = ['A', 'B, 'C', 'D', 'E', 'F', 'G'];
var aCopy = arr.slice();
aCopy === arr; // false

注意复制的对象并非它本身。

push和pop
push()Array的末尾添加若干元素,pop()则把Array的最后一个元素删掉:

var arr = [1, 2];
arr.push('A', 'B');// 返回Array新的长度:4
arr.pop();
arr.pop(); arr.pop(); arr.pop();
arr;// []
arr.pop(); //空数组继续pop不会报错,而是返回undefined
arr; // []

而如果要在头部加元素,可以使用arr.unshift()方法,删除第一个元素则是arr.shift()

sort
sort()可以对当前Array进行排序, 它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:

var arr = ['B', 'C', 'A'];
arr.sort();
arr;//['A', 'B', 'C']

reverse
如果要反转整个arr,可以使用arr.reverse()

splice
这是修改Array的万能方法。它允许从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

var arr = ['Microsoft' , 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
//从索引2开始删除3个元素,再添加两个元素
arr.splice(2, 3, 'Google', 'Facebook'); //  返回删除的元素['Yahoo', 'AOL', 'Exicite']
arr; //['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
//只删除
arr.splice(2,2);
arr; // ['Microsoft', 'Apple', 'Oracle']
//只添加
arr.splice(2,0, 'Google', 'Facebook');//返回[]
arr; //['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

concat
concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array:

var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added;// ['A', 'B', 'C', 1, 2, 3]
arr;// ['A', 'B', 'C']

concat() 方法可以接受任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]);// ['A', 'B', 'C', 1, 2, 3, 4]

join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

如果array的元素不是字符串,将自动转换为字符串后再连接。

JavaScript也支持多维数组
JS对象
对象由花括号分割。在括号内部,对象的属性以名称和值对的形式(name:value)来定义,属性由逗号分割:

var person={firstname:"Bill", lastname:"Gates", id:5566};

该对象有三个属性,空格和折行无关紧要,声明可以横跨多行。
对象属性有两种寻址方式:

name=person.lastname;
name=person["lastname"];

对象的属性也可以用这种方式定义

var xiaoming = {
	name: '小红’,
	'middle-school': 'No.1 Middle School'
};

其中第二个属性名 middle-school 不是一个有效的变量,就需要用 ‘’ 括起来。访问这个属性也无法使用.操作符,必须用[‘xxx’]来访问:
事实上,JS中的对象所有的属性都是字符串,不过属性对应的值可以使任意数据类型。
如果访问不存在的属性,JS也不会报错,只会返回undefine

JS中,属性是可以动态添加或删除的:

var xiaoming = {
	name: '小明’
};
xiaoming,age;  //undefine
xiaoming.age = 18;
xiaoming.age; // 18
delete xiaoming.age;
xiaoming.age; //undefine
delete xiaoming['name'];
xiaoming.name; // undefine
delete xiaoming.school; //删除一个不存在的school属性,也并不会报错

可以使用in 来判断一个属性是否存在:

var xiaoming = {
	name: '小明’,
	birth:1990
};
'name' in xiaoming; //true
‘grade’ in xiaoming; //false

但是需要注意的是,in判断一个属性存在,但不一定是小明的,也有可能是小明继承得到的。
‘toString’ in xiaoming; // true
因为toString定义在object对象中,所有对象都会在原型链上指向object,所以小明也拥有toString属性
如果要判断一个属性是否自身拥有而非继承得到,可以用hasOwnProperty()方法:

var xiaoming = {
	name: '小明’
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false

Undefined & Null
Undefined 这个值表示变量不含有值。
可以通过将变量的值设置为null来清空变量

cars = null;
person = null;

声明变量类型
当创建新变量时,可以用关键词new来声明其类型(意义在哪里?)

var carname= new String;
var x= new Number;
var y= new Boolean;
var cars= new Array;
var Person= new Object;

JS变量均为对象。当您声明一个变量时,就创建了一个新的对象。

对象
JS中所有的事物都是对象:字符串、数字、数组、日期等。在JS中,对象是拥有属性和方法的数据。

属性和方法
属性是与对象相关的值。
方法是能够在对象上执行的动作。
比如car.name=Fiat是汽车的属性
car.start()是汽车的方法。

JS中的对象
var txt = "Hello"
在声明这样一个变量时,实际上已经创建了一个JS字符串对象。字符串对象拥有内建的属性length。对于上面的字符串来说,length的值为5.字符串对象同时拥有若干个内建的方法。
属性:
txt.length=5
方法:

txt.indexOf()
txt.replace()
txt.search()

在面向对象的语言中,属性和方法被称为对象的成员。

创建一个JS对象
JS中几乎所有事务都是对象:字符串、数字、数组、日期、函数,等等。
也可以创建自己的对象,如下:

person=new Object();
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue";

访问对象的属性与方法
访问对象的属性
var x=message.length;
访问对象的方法
var x=message.toUpperCase();

在面向对象的语言中,一般不会用some_method()的语法标记,而是用someMethod()这样标记函数

var 声明的意义
不使用var声明的变量,如果直接对其赋值,将会自动被申明为全局变量。在同一个页面内,如果注入多个不同的javascript代码,如果多个代码中有相同名称的全局变量,将会产生难以调试的错误。因此ECMA在后续规范中推出了strict模式。在该模式下运行的JS代码,强制通过var申明变量,否则将导致运行错误。
使用strict模式的方法为,在第一行写上:
'use strict';

字符串
转义字符\可以转义很多字符,比如\n表示换行,\t表示制表等。ASCII字符可以以\x##形式的十六进制表示,比如:
'\x41' ; //完全等同于‘A’
也可以用\u###来表示一个Unicode字符。

由于多行字符串一直写\n比较费事,所以ES6新增了`符号来表示多行字符串

`这是
一个多行
字符串`;

模板字符串
以前的多个字符串要连接起来,可以用+好,但是 太麻烦
ES6新增了一种模板字符串,表示方法和上面的多行字符串一样的,但是它会自动替换字符串中的变量:

var name = '小明’ ;
var age = 20;
var message = `你好,${name}, 你今年${age}岁了!`;
alert(message);

字符串的操作

var s = 'Hello, world!';
s.length; // 13
s[6];//' ' 

所以字符串的操作其实可以和数组类似,但是如果想对字符串的某个索引赋值,不会报错,但不会有任何效果,因为字符串是不可变的

toUpperCase
把一个字符串全部变为大写:

var s = 'Hello';
s.toUpperCase();

toLowerCase
把一个字符串全部变为小写

indexOf
indexOf() 会搜索指定字符串出现的位置:

var s = 'hello, world';
s.indexOf('world'); // 返回7
s.indexOf('World'); // 没有找到指定的子串,返回-1

substring
substring() 返回指定索引区间的子串

var s = 'hello,world'
s.substring(0, 5); // 从索引0到5(不包括5),返回‘hello’
s.substring(7); //从索引7到结束,返回‘world’

你可能感兴趣的:(JS语言学习)