可能重複:
JavaScript 「For …in」 with ArraysJavascript爲什麼FOR IN是一種不好的做法?
人們總是告訴我,您對在是不好的做法,請你能告訴我爲什麼嗎?爲什麼更好地使用我?
我總是喜歡用FOR,因爲我使用PHP太,我使用foreach
了很多,這非常類似於在JavaScript的:)
可能重複:
JavaScript 「For …in」 with ArraysJavascript爲什麼FOR IN是一種不好的做法?
人們總是告訴我,您對在是不好的做法,請你能告訴我爲什麼嗎?爲什麼更好地使用我?
我總是喜歡用FOR,因爲我使用PHP太,我使用foreach
了很多,這非常類似於在JavaScript的:)
壞的做法是不明白之間的區別列舉過一個數組對象和在其上迭代。否則for...in
循環是非常好的工具。有大的內部差異,但我會嘗試在實際的方式來解釋:
語法是:for (string in object)
,其中object
是Object
一個實例(和,自然,任其後代)和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
來得方便!
參見大衛·漢弗萊的帖子[遍歷JavaScript中快速對象(http://vocamus.net/dave/?p=1205) - 對數組的是慢得多。 – 2010-11-25 02:21:01