本文探讨JavaScript中数组长度变化的两个关键场景:使用字符串键(如name)赋值不改变length,而使用数字字符串(如'3')会扩展数组并填充undefined。理解这一机制有助于避免隐蔽的越界错误。
字符串键赋值不改变数组长度
示例代码如下:
var lennon=Array();
lennon["name"]="windy";
lennon["year"]="1989";
lennon["living"]=true;
alert(lennon.length); 运行结果显示:lennon.length 为 0
原因分析:
通过上述方式增加数组元素,即使用字符串作为键名,不会改变数组的长度属性。
arr["a"]=3;
第二点:
数字索引字符串导致数组扩展
另一组示例代码如下:
var foo2 = [];
foo2['3'] = 3;
foo2['age'] = 20;
debugger;
alert(foo2.length);
此时 foo2.length 的值为 4
所有未显式赋值的数组索引位置,其值将被定义为 undefined。
JavaScript 具备自动调整数组大小的机制,这种特性容易引发数组越界(out of bounds array)问题,且此类错误较难察觉。因此,在处理数组时需格外注意类似情况。