JavaScript创建”稀疏“数组(sparse array)的坑
在创建”稀疏“数组(sparse array,即含有空白或空缺单元的数组)时要特别注意:
var a = []; a[0] = 1; // 此处没有设置a[1]单元 a[2] = [3]; a[1]; // undefined a.length; // 3
上面的代码可以正常运行,但其中的”空白单元“(empty slot)可能会导致出人意料的结果。
a[1] 的值为 undefined,但这与将其显式赋值为 undefined(a[1] = undefined)还是有所区别。
数组通过数字进行索引,但有趣的是它们也是对象,所以可能包含字符串键值和属性(但这些并不计算在数组长度内):
var a =[]; a[0] = 1; a["foobar"] = 2; a.length; // 1 a["foobar"]; // 2 a.foobar; // 2
这里有个问题需要特别注意,如果字符串键值能够被强制类型转换为十进制数字的话,它们就会被当作数字索引来处理。
var a = []; a["13"] = 42; a.length; // 14
在数组中加入字符串键值/属性并不是一个好主意。建议使用对象来存放键值 / 属性值,用数组来存放数字索引值。