2010-11-23 112 views

回答

10

壞的做法是不明白之間的區別列舉過一個數組對象在其上迭代。否則for...in循環是非常好的工具。有大的內部差異,但我會嘗試在實際的方式來解釋:

語法是:for (string in object),其中objectObject一個實例(和,自然,任其後代)和string VAR接收的屬性名稱每個循環迭代上的object。但Array也是Object後裔!所以,這是完全合法的使用:

var array = [0,1,2]; 
for (var property in array) 
    alert(typeof property + '\t' + property + '\n' + typeof array[property] + '\t' + array[property]); 

而只是是沒有意義的可言。此外,請注意上面的支架符號[]。這是一種會員運算符的形式,不能與數組元素訪問混淆。首先需要string類型的操作數和第二個 - number。讓我們打破上面的例子,並使用var array = new Array(3)來創建數組。循環工作不再,但array.length == 3正確。

結論:使用for...in除了數組以外的任何對象。在數組中使用for (var number = 0; number < array.length; number++)

順便說一句,JavaScript 對象與PHP的關聯數組(哈希表,如果你堅持正確的術語)是相似的。語法是var object = {string:value,anotherName:moreStuff}。這裏for...in來得方便!

Further reading

+2

參見大衛·漢弗萊的帖子[遍歷JavaScript中快速對象(http://vocamus.net/dave/?p=1205) - 對數組的是慢得多。 – 2010-11-25 02:21:01