2010-09-02 133 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) { 
    .. 
});