索引

读取和设置数组的值时,要使用方括号并提供相应值得基于0的数字索引

如下所示:

1
2
3
4
var colors = ["Green", "Red", "Blue"]; // 定义一个字符串数组
alert(colors[0]); // 显示第一项
colors[2] = "Black"; // 修改第三项
colors[3] = "Yellow"; // 新增第四项

方括号中的索引表示要访问的值。

如果索引小于数组中的项数,则返回对应项的值。

设置数组的值也使用相同的语法,但会替换指定位置的值。

如果设置某个值得索引超过了数组现有项数,数组就会自动增加到该索引值加1的长度。

数组的项数保存在其length属性中,这个属性始终会返回0或者更大的值。

如下所示:

1
2
3
4
var colors = ["Green", "Red", "Blue"]; // 创建一个包含三个字符串的数组
var names = []; // 创建一个空数组
alert(colors.length); // 3
alert(names.length); // 0

数组的length属性不是只读的,通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。

如下所示:

1
2
3
var colors = ["Green", "Red", "Blue"]; // 创建一个包含3个字符串的数组
colors.length = 2; // 设置length属性为2
alert(colors[2]); // undefined

该数组colors开始有3个值,将其length属性设置为2移除最后一项(位置为2的那一项),结果再访问colors[2]就会显示undefined

如果将其length属性设置为大于数组项数的值,则新增的每一项都会取得undefined值。

如下所示:

1
2
3
var colors = ["Green", "Red", "Blue"];
colors.length = 4; // 设置length属性为4
alert(colors[3]); // undefined

该数组虽然包含3个项,但把它的length属性设置为4。这个数组不存在位置3,所以访问这个位置的值就得到了特殊值undefined

利用length属性值也可以方便地在数组末尾添加新项

如下所示:

1
2
3
var colors = ["Green", "Red", "Blue"]; // 创建一个包含3个字符串的数组
colors[colors.length] = "Black"; // 在位置3添加一个新项
colors[colors.length] = "Yellow"; // 在位置4再添加一个新项

由于数组最后一项的索引始终是length-1,因此下一个新项的位置就是length。每当在数组末尾添加一项后,其length属性都会自动更新以反应这一变化。

当把一个值放在超出当前数组大小的位置时,数组就会重新计算其长度值,即长度值等于最后一项索引加1。

如下所示:

1
2
3
4
var colors = ["Green", "Red", "Blue"]; // 创建一个包含3个字符串的数组
colors[99] = "Black"; // 在位置99添加一个新项
alert(colors.length); // 100
alert(colors[98]); // undefined

我们向colors数组的位置99插入一个值,结果数组的新长度(length)就是100(99+1)。而位置3到位置98实际上是不存在的,所以访问它们都将返回undefined。

数组最多可以包含4 294 967 295个项,如果想添加的项数超过这个上限值就会发生异常。而创建一个初始大小接近这个上限值得数组,则可能会导致运行时间过长的脚本错误。