所以我在IE8中使用這樣的:IE8的...在枚舉
var hi=["hi", "lo", "foo", "bar"];
for(i in hi){console.log(i)};
//WTF is that indexOf i value?
LOG: 0
LOG: 1
LOG: 2
LOG: 3
LOG: indexOf
undefined
在Chrome和其他人,我就拿到0-3,沒有神祕 「的indexOf」 的事情。爲什麼和什麼是修復?
所以我在IE8中使用這樣的:IE8的...在枚舉
var hi=["hi", "lo", "foo", "bar"];
for(i in hi){console.log(i)};
//WTF is that indexOf i value?
LOG: 0
LOG: 1
LOG: 2
LOG: 3
LOG: indexOf
undefined
在Chrome和其他人,我就拿到0-3,沒有神祕 「的indexOf」 的事情。爲什麼和什麼是修復?
不要對陣列使用for...in
。在這種情況下最好使用傳統的for
循環。
原因是因爲for...in
將數組視爲對象,因此可能在循環中包含indexOf
或length
之類的屬性。正常的for
循環只處理數字鍵,所以避免了這個問題。
在附註上,在遍歷純對象時也會出現不需要的屬性(如其他人注意到的那樣,添加到對象原型的屬性將顯示出來)。您可以通過編寫for...in
循環這種方式解決這個問題:
var obj = { ... };
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
var item = obj[prop];
...
}
}
需要明確的是,雖然:你仍然不應陣列使用此方法。
你使用了錯誤的循環類型的數組 - for ... in ...
還將包括對象,而你的情況包括:.indexOf()
方法的任何枚舉性能。
使用這個代替:
var i, n = hi.length;
for (i = 0; i < n; ++i) {
console.log(i, hi[i]);
}
Chrome和其他最新的瀏覽器實現的ECMAScript 5,正確標記所有內置的方法作爲不可枚舉性能。
哈,我們再戰! – benekastah 2012-01-31 18:41:59
'indexOf'不是IE8中的數組方法,它是從用戶添加的,這就是爲什麼它出現 – Esailija 2012-01-31 18:47:08
IE8沒有'indexOf()'?哇... – Alnitak 2012-01-31 18:49:25
發生這種情況是因爲您在頁面上包含的腳本正在將indexOf
方法添加到Array.prototype
。這意味着所有數組都繼承了indexOf
方法,這很好,因爲它意味着即使在IE8中也可以使用該方法。
但是,由於無法在IE8中將屬性標記爲非枚舉屬性,因此每次枚舉數組的所有屬性時都會看到它,這就是您在for
- in
循環。您可能需要一個for
循環。
謝謝!忍者... – randomor 2012-01-31 18:52:39