2.5 数组
现在,我们对JavaScript中的基本数据类型已经有了一定的了解,是时候将注意力转向更有趣的数据结构——数组了。
我们可以用一对不带任何内容的方括号来声明一个空数组变量,例如:
>>> var a = [];
>>> typeof a;
"object"
如您所见,typeof在这里返回的是“object”。建议您先别管这个,待我们重点讨论对象时再回头来说明这个问题。
如果我们要定义一个带三个元素的数组,可以这样做:
>>> var a = [1,2,3];
只要在控制台中简单地输入数组名,就能打印出该数组中的所有内容:
>>> a
[1, 2, 3]
那么,究竟什么是数组呢?简而言之,它就是一个用于存储数据的列表。与一次只能存储一个数据值的变量不同,我们可以用数组来存储任意数量的元素值。现在的问题是,我们应该如何访问数组中的各个数据值呢?
通常,元素在数组中的索引位置是从0开始编号的。也就是说,数组首元素的索引值(或者说位置值)应该是0,第二个元素的索引值则是1,以此类推。表2-5中所显示的就是之前那个三元素数组实例中的具体情况。
为了访问特定的数组元素,我们需要用一对方括号来指定元素的索引值。因此a[0]所访问的就是数组a的首元素,而a[1]则代表第二个元素,以此类推。
>>> a[0]
1
>>> a[1]
2
2.5.1 增加、更新数组元素
我们可以通过索引来更新数组中的元素。例如在下面的代码中,我们更新了第三个元素(索引值为2)的值,并将更新后的数组打印出来:
>>> a[2] = 'three';
"three"
>>> a
[1, 2, "three"]
另外,我们也可以通过索引一个之前不存在的位置,来为其添加更多的数组元素。
>>> a[3] = 'four';
"four"
>>> a
[1, 2, "three", "four"]
如果新元素被添加的位置与原数组末端之间存在一定的间隔,那么这之间的元素将会被自动设定为undefined值。例如:
>>> var a = [1,2,3];
>>> a[6] = 'new';
"new"
>>> a
[1, 2, 3, undefined, undefined, undefined, "new"]
2.5.2 删除元素
为了删除特定的元素,我们需要用到delete操作符。该操作符虽然不能真正移除一个元素,但它能将其设定为undefined。元素被删除后,数组的长度并不会受到影响。
>>> var a = [1, 2, 3];
>>> delete a[1];
true
>>> a
[1, undefined, 3]
2.5.3 数组的数组
通常情况下,我们可以在数组中存放任何类型的值,包括另一个数组。
>>> var a = [1, "two", false, null, undefined];
>>> a
[1, "two", false, null, undefined]
>>> a[5] = [1,2,3]
[1, 2, 3]
>>> a
[1, "two", false, null, undefined, [1, 2, 3]]
让我们来看一个例子,在下面的代码中,我们定义了一个含有两个数组的数组:
>>> var a = [[1,2,3],[4,5,6]];
>>> a
[[1, 2, 3], [4, 5, 6]]
在该数组中,首元素a[0]本身也是一个数组。
>>> a[0]
[1, 2, 3]
如果想要访问内层数组中的特定元素,我们需要再加一组方括号。例如:
>>> a[0][0]
1
>>> a[1][2]
6
另外值得注意的是,我们通过这种访问数组方式来获取某个字符串中的特定字符。例如:
>>> var s = 'one';
>>> s[0]
"o"
>>> s[1]
"n"
>>> s[2]
"e"
除此之外,数组的使用方法还有很多(我们将会在第4章中详细介绍),现在先到此为止,请记住以下内容。
数组是一种数据存储形式。
数组元素是可以被索引的。
数组中的元素索引是从0开始的,并且按照每个元素的位置依次递增。
我们是通过方括号中的索引值来访问数组元素的。
数组能存储任何类型的数据,包括另一个数组。