JavaScript语言核心—Third days
数组是指的有序集合,每个值叫做一个元素,而每个元素在数组中有一个位置以数字表示称为索引。
[1] 创建数组
使用数组直接量是创建数组最直接的方法:
var empty = []; //控数组
var primes = [2,3,4,5,6]; //有5个元素的数组
var misc = [1.1,true,"a"]; //三个不同类型元素的数组
数组直接量中的值不一定是常量:
var base = 12306;
var table = [base,base+1,base+2,base+3];
如果数组直接量中的值被省略将赋予undefined:
var count = [1,,3]; //有三个元素,中间的元素为undefined
var undef = [,,,]; //数组有两个元素,都是undefined
//数组的直接量允许结尾的逗号可选
调用构造函数Array()是创建数组的另一种方法:
。调用时没有参数
var a = new Array();
。调用时有一个数值参数,它指定长度
var a = new Array(10);
。显示制定两个或多个数组元素或者数组的一个非数值元素
var a = new Array(5,4,3,2,1,"testing testing");
[2] 稀疏数组
系数数组就是包含从0开始的不连续索引的数组。
如果数组是稀疏的,length属性值大于元素个数。
a = new Array(5); //数组没有元素,但a.length是5
a = []; //创建一个空数组,length为0
a[1000] = 2; //赋值添加一个元素,length为1001;
每个数组都有一个length属性,代表数组中元素个数,其值比数组中最大的索引大1。
[3] 多维数组
JavaScript不支持多维数组但可以用数组的数组来模仿。访问数组中的元素,只要简单的使用两次[]操作符即可。
[4] 数组的方法
join(): Array.join()方法将数组的元素转化为字符串并连接起来,可以指定分隔符,如果没有默认逗号隔开。
var a = [1,2,3,4]; //创建一个包含四个元素的数组
a.join(); //返回 "1,2,3,4"
a.join(" "); //返回 "1 2 3 4"
a.join(""); //返回1234
var b = new Array(10); //长度为10的空数组
b.join("_"); //返回 "_ _ _ _ _ _ _ _ _" 输出9个连字号组成的字符串
reverse():Array.reverse()将数组中的元素颠倒顺序,返回逆序的数组。
var a= [1,2,3];
a.reverse(); //[3,2,1]
var a= [10,2,3];
a.reverse(); //[3,2,10]
//此处排序只看第一位
sort(): Array.sort()将数组中的元素排序并返回数组。sort()不带参数时,以字母表顺序排序。
var a = new Array("banana","cherry","apple");
a.sort();
var s = a.join(","); //返回 apple,banana,cherry
concat(): Array.concat()创建并返回一个新数组,它的元素包括调用concat()的原始数组的元素和cancat()的每一个参数。
var a = [1,2,3];
a.concat(4,5); //返回 [1,2,3,4,5]
a.concat([4,5]); //返回 [1,2,3,4,5]
a.concat([4,5],[6,7]); //返回 [1,2,3,4,5,6,7]
a.concat(4,[5,[6,7]]); //返回 [1,2,3,4,5,[6,7]]
slice():Array.slice()方法返回指定数组的一个片段或子数组。
var a = [1,2,3,4,5];
a.slice(0,3); //返回[1,2,3]
a.slice(3); //返回[4,5]
a.slice(1,-1); //返回[2,3,4]
a.slice(-3,-2); //返回[3]
splice():Array.splice()方法是在数组中插入或删除元素的通用方法,在插入或删除点之后的数组元素会根据需要增加或减小它们的索引值,因此数组的其他部分仍保持连续的。第一个参数制定插入和(或)删除的起始位置;地位个参数制定了应该从数组中删除的元素个数,如果第二个省略,则从起始位置到结尾所有元素都将被删除。
var a = [1,2,3,4,5,6,7,8];
a.splice(4); //返回[5,6,7];a = [1,2,3,4]
a.splice(1,2); //返回[2,3];a = [1,4]
a.splice(1,2); //返回[4];a = [4]
push()和pop(): 允许将数组当做栈来使用。
。push()方法在数组的结尾添加一个或多个元素,并返回新的数组长度。
。pop()删除数组的最后一个元素,并返回它删除的值。
两个方法组合使用能使用数组实现先进后出的栈。
var stack = [] //[]
stack.push(1,2); //[1,2]
stack.pop(); //[1]
stack.push(3); //[1,3]
stack.pop(); //[1]
stack.push([4,5]); //[1,[4,5]]
stack.pop(); //[1]
stack.pop(); //[0]
unshift()和shife(): 在数组的头部进行元素的插入和删除。
。unshift()方法在数组的结头部加一个或多个元素,并将已存在的元素移动到更高索引来获取足够的空间,并返回新的数组长度。
。shife()删除数组的第一个元素,并将其返回。
var a = []; //[]
a.unshift(1); //[1]
a.unshift(22); //[22,1]
a.shift(); //[1]
a.unshift(3,[4,5]); //[3,[4,5],1]
a.shift(); //[[4,5],1]
a.shift(); //[1]
a.shift(); //[]
toString()和toLocaleString():toLocaleString()是toString()方法的本地化版本。
[1,2,3].toString(); //1,2,3
["a","b","c"].toString(); //a,b,a
[1,[2,"c"]].toString(); //1,2,c