qua*_*ape 6 javascript for-loop internet-explorer-8
在IE8中测试一些JavaScrpt代码时,我在做一个简单的for..in循环时遇到了一些奇怪的行为:
var categories = ['for', 'bar', 'steam'];
for(var key in categories) {
console.log(key);
}
Run Code Online (Sandbox Code Playgroud)
输出:
0
1
2
forEach
map
filter
reduce
indexOf
end
Run Code Online (Sandbox Code Playgroud)
其中包括Array原型功能,对吧?这绝对不是它应该工作的方式.这是为什么?
顺便说一句,它当然在将循环更改为时有效for (var key=0; key < categories.length, key++).
那是因为您可能正在使用扩展的库Array.prototype。在其他浏览器中不会发生这种情况的原因是它们本身已经支持这些方法。由于IE不支持,所以有一些代码在JS中添加了它,这使得方法可枚举。
for in这就是为什么不应该使用数组的原因之一。
另一个事实是,它for in不保证迭代的顺序,尽管它确实在大多数浏览器中工作,但规范明确将其保留为未定义的行为。John Resig 本人针对 chrome http://code.google.com/p/chromium/issues/detail?id=883提交了一个错误,该错误已关闭,因为无法修复,因为不需要订购属性
坚持使用标准循环