所有的数组都是对象,可以为其创建任意名字的属性,而非数组的索引。如a[1.2] = 5;
当试图查询对象中不存在的属性时,不会报错,只会返回undefined。
省略的元素在数组中是存在的,其值为undefined。这和数组元素根本不存在是有区别的。
var a1 = [,,,,];//a1=[undefined,undefined,undefined,undefined];
var a2 = new Array(3);//a2根本没有元素
0 in a1;//true
0 in a2;//false
如果为一个苏族元素赋值,它的索引i大于数组的长度,那么数组的长度将设置为i+1;
设置数组length属性为一个小于当前数组长度的非负整数n时,当前数组中那些索引大于或等于n的元素将删除。
a = [1,2,3,4,5];
a.length = 3;//a = [1,2,3]
a.length = 0;//a = [];
a.length = 5;//长度为5,但没有元素
让数组的length元素变成只读的:
var a = [1,2,3];
Object.defineProperty(a,"length",{writable:false});
数组的方法:
在数组末尾添加元素:
arr.push(1,"2");//将1、"2"添加到数组末尾
arr[arr.length] = 1;//将1添加到数组末尾
在数组首部添加元素:
arr.unshift(1);//将1添加到数组首部
删除数组末尾的元素pop(),删除数组首部的元素shift(),这两种方法数组的长度减一。但使用delete方法不会使数组的长度减一,只是使原数组变成稀疏数组。
slice()用于插入、删除、替换数组元素,它会根据需要修改length属性,并移动到更高或更低的索引处。
遍历数组(优化):
for (var i = 0,len = arr.length; i < len; i++){
if(!arr[i]) continue;//跳过null,undefined和不存在的元素
if(arr[i] === undefined) continue;//跳过undefined和不存在的元素
if(!(i in arr)) continue;//跳过不存在的元素
}
ECMAScipt5遍历数组的新方法:arr.forEach(function(x){//把每个元素传递给此函数
});
join()方法将数组中所有元素转换成字符串并连接在一起,返回最后生成的字符串。可以指定一个字符串在生成的字符串中分隔数组的各个元素。默认使用逗号。
join()方法是split()方法的逆向操作。
var arr= [1,2,3];
arr.join();//"1,2,3"
arr.join(" ");//"1 2 3"
arr.join("");//"123"
arr.join("-");//"1-2-3"
reverse()将原数组倒序排列,元素组改变。
var a = [1,2,3];
a.reverse().join();//"1,2,3",a=[3,2,1]
sort()将数组元素排序(按照字母表的顺序)并返回排序后的数组。
用数值大小而非字母表顺序排序:
var a = [5,4,7,2,3];
a.sort(function(a,b){
return a-b;//升序
});
a.sort(function(a,b){
return b-a;//倒序
});
concat()创建并返回一个新数组,不影响原数组。
slice(indexBegin,indexEnd)返回数组包含第一个参数的位置和所有到第二个参数但不含第二个参数的位置之间的所有数组元素,不影响原数组。
var a=[1,2,3,4,5];
a.slice(0,3);//返回[1,2,3]
splice()不同于concat()和slice(),splice()会修改调用的数组。用于在数组中插入、删除元素。在插入或删除之后,数组会根据需要增加或减少它们的索引值。
splice()方法的第一个参数指明了要在数组中插入或删除元素的起始位置,第二个参数指明了插入或删除的元素的个数。第二个以后的任意个数参数指定了要插入到数组的元素。如果省略第二个参数,就删除从第一个参数开始的位置到数组末尾所有的元素。
var a = [1,2,3,4,5,6,7];
a.splice(0,2);//返回[1,2,]a = [3,4,5,6,7]
a.splice(3);//返回[6,7],a=[3,4,5]
a.splice(2,0,'a','b');返回[],a=[3,4,5,'a','b']
a.splice(2,2,[1,2],3);返回[5,'a'],a=[3,4,[1,2],3,'b']
注:splice()与concat()的区别,splice()会插入数组本身,而concat()插入数组的元素。
page 167