Javascript数组作为属性名称

时间:2011-11-02 01:08:10

标签: javascript arrays

var myArray = new Array(); 
myArray['112'] = 0;
myArray.length

为什么length 113在上面的示例中?不应'112'为数组添加对象属性并创建类似于myArray = {"112":0}的内容吗?

除此之外,为什么长度为113而不是1?由于myArray实际上只包含1个值

4 个答案:

答案 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个元素。