for
循環指的是iterate
,同時遞增/遞減。
// note that I'm making this big and ugly to show what's going on
var incrementor = 1, length = 10,
array = [ "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten" ];
for (; incrementor <= length; incrementor = incrementor + 1) {
console.log(incrementor); // 1,2,3,...,10
console.log(array[incrementor - 1]); // "one", "two", "three", ..., "ten"
}
for ... in ...
迴路通過對象屬性意味着enumerate
。
var object = { "key1" : "one", "key2" : "two", "key3" : "three" },
key = "";
for (key in object) {
console.log(key); // "key1", "key2", "key3"
console.log(object[key]); // "one", "two", "three"
}
您使用for
數組的原因是因爲糟糕的瀏覽器,for ... in ...
不僅包括數量的屬性(即:key=0, key=1,...
),但它也可以通過枚舉的東西,你不希望它.. ... ...就像key=splice, key=length, key=unshift
。 如果您在專業網站上運行此代碼,或者在特定硬件上運行JS的特定版本,或者在Unity或Unreal Editor的UnrealScript等程序中作爲腳本語言運行,那麼這不是一件好事。
的原因你沒有使用對象上的iterator
是因爲你通常不會做出這樣的對象:
var obj = { "0" : "zero", "1" : "one", "2" : "two" };
而且即使你沒有(jQuery不會這樣的事情,例如),有可能是你想枚舉的基於單詞的屬性,但你不能,因爲你在計數。
同樣重要的是要注意:enumerating
與for ... in ...
其功能沒有標準化。 這意味着它不是100%保證按預期的順序吐出數值。 如果你依靠你的循環去0,1,2,3,...
那麼for ... in ...
不能保證100%的瀏覽器將會這樣做,100%的時間 - 即使大多數瀏覽器在大多數時間都適用。
最經常的是,他們現在依靠先入先出的原則。 如果您構建的對象類似{ one : 1, two : 2, three : 3 }
,則任何現代瀏覽器都會打印1,2,3
。如果您構建的對象如下:{ two: 2, one: 1, six: 6 }
,您將獲得2,1,6
。
但是,這是95%的時間「應該」,而不是100%的時間「將」。
在這個循環中找不到一個在for循環之外的對象鍵值的變量,因此我建議在這種情況下使用for-in-loop。 – 2018-02-02 15:17:33