2010-09-02 130 views

回答

1

想想JavaScript数组作为一个正常的对象名为length一个特殊属性的(实际上,它更复杂一点)。所以for..in循环的行为是作为其他对象相同:

var a = new Array(); 

a[1] = "a"; 
alert(a.length); // 2 
alert(a[0]); // undefined 

a[1000] = "b" 
alert(a.length); // 1001 


a[-1] = "c"; 
alert(a[-1]); // c 

a.abc="why not"; 

for(var key in a) 
{ 
    alert(key+"="+a[key]); 
} 
// 1=a 
// 1000=b 
// -1=c 
// abc=why not 

还要注意的是,你可以有你的阵列中的差距,而不必支付内存价格。

10

这是设计。当你知道密钥的时候,在数组中获得一个值是很简单的,但是如果给定一个值的话,获得密钥要困难得多。值可以重复,那么你怎么知道应该使用哪个键?但是一把钥匙的独特之处在于,只有一个钥匙才能获得。所以,for循环将迭代关键字,并且获取关联值很简单。

+0

对于op:如果对象是数组,则“Keys”可与索引(0..n)互换。 – 2010-09-02 02:23:14

+0

@Daniel:排序。如果向数组或属性Array.prototype添加属性,它们也将包含在循环中。 – 2010-09-02 03:22:57

+0

谢谢马修,现在我明白了设计。 – 2010-09-02 03:39:47

0

有一个for each...in循环,完全是 - 只枚举值。即将推出到您附近的浏览器。

for each(var a in Values) { 
    .. 
} 

对于阵列来说,有一个新功能forEach可以达到同样的效果。

someArray.forEach(function(value) { 
    .. 
});