var myArray = new Array();
myArray['112'] = 0;
myArray.length
为什么length
113在上面的示例中?不应'112'
为数组添加对象属性并创建类似于myArray = {"112":0}
的内容吗?
除此之外,为什么长度为113而不是1?由于myArray
实际上只包含1个值
答案 0 :(得分:4)
数组length
比最高索引多一个,因此您获得113
。
答案 1 :(得分:2)
没有。当JS进行数组查找时,'112'
字符串和纯数字112
评估相同的事情,因此您在数组中获得一个插槽而不是属性。
最简单地将JS数组索引视为恰好是数字的属性,即使是字符串形式。它比你最初想的更加变色无常。
但是如果你添加一个带有一些非数字名称的属性,比如myArray['foo']
,它会按照你的预期进行,长度也不会改变。
答案 2 :(得分:1)
考虑这个简单的例子:
var aa = [];
aa[3] = 'three';
alert( aa.length // 4
+ '\n' + aa[2] // undefined
+ '\n' + aa.hasOwnProperty('2') // false
);
数字 3 用于分配属性名称,但它被转换为字符串并用作标准属性名称(即字符串“3”)。
添加名为“3”的属性创建了一个属性并将长度设置为4,因为长度始终设置为比最大的非负整数属性名称多一个。
没有创建其他属性,该数组是“稀疏的”,即它没有按顺序命名(编号)的成员。 for..in 循环也可用于查看只有一个属性。
答案 3 :(得分:-2)
你有0..112
元素的数组 - 总长度为113个元素。