数组是一组按顺序排列的集合,集合的每个值称为元素。而每个元素在数组中有一个位置,以数字表示,称为索引。索引的起始值为0
。JavaScript的数组可以包括任意数据类型。例如:
[1, 2, 3.14, 'Hello', null, true];
上述数组包含6个元素。数组用[]
表示,元素之间用,
分隔。
创建数组
可以使用数组字面量和 new 关键字来创建数组。
使用数组字面量创建数组(推荐)
var empty = []; // 没有元素的数组
var primes = [2, 3, 5, 7, 11]; // 有5个数值的数组
var misc = [1.1, true, "a"]; // 3个不同类型的元素
// 数组直接量中的值不一定要是常量,可以是任意的表达式
var base = 1024;
var table = [base, base+1, base+2, base+3];
// 也可以包含对象直接量或其他数组直接量
var b = [[1, {
x:1, y:2}], [2, {
x:3, y:4}]];
注意,不要忽略数组字面量的最后一个元素,仅以逗号结尾。下面几个案例,在不同的浏览器下,可能会被识别成2个元素,也有可能识别成3个元素,而造成程序bug。例如:
var nums = [,,,]; // 不好的写法
var names = ["stone",,]; // 不好的写法
var colors = ["red","green",]; // 不好的写法
使用 new 关键字创建数组
使用 new
关键字调用构造函数 Array()
是创建数组的另一种方法,可以用三种方式调用构造函数。例如:
// 调用时没有参数
var a = new Array();
// 调用时有一个数值参数,它指定长度
var a = new Array(10);
// 显式指定多个数组元素或者数组的一个非数值元素
var a = new Array(5, 4, 3, 2, 1, "testing");
数组元素的读和写
使用 []
操作符来访问数组中的一个元素。数组的引用位于方括号的左边。方括号中是一个返回非负整数值的任意表达式。使用该语法既可以读又可以写数组的一个元素。例如:
var arr = [1, 2, 3.14, 'Hello', null, true];
var value = arr[0]; // 返回索引为0的元素,即1
var value = arr[5]; // 返回索引为5的元素,即true
arr[6]=99; // 写第6个元素
var value = arr[7]; // 索引超出了范围,返回undefined
稀疏数组
稀疏数组就是包含从0开始的不连续索引的数组。通常,数组的 length
属性值代表数组中元素的个数。如果数组是稀疏的,length
属性值大于元素的个数。可以用 Array()
构造函数或简单地指定数组的索引值大于当前的数组长度来创建稀疏数组。
a = new Array(5); // 数组没有元素,但是 a.length = 5
a = []; // 创建一个空数组,a.length = 0
a[1000] = 0; // 添加一个元素,a.length 被自动更新为1001
足够稀疏的数组通常在实现上比稠密的数组更慢、内存利用率更高,在这样的数组中查找元素的时间与常规对象属性的查找时间一样长。
需要注意的是,当省略数组直接量中的值时(使用连续的逗号,比如 [1,,3]
),这时所得到的数组也是稀疏数组,省略掉的值是不存在的:
var a1 = [,'1','2']; // 此数组长度是3
var a2 = [undefined]