javascript - 为什么 for...in 循环遍历函数名

标签 javascript for-loop internet-explorer-8

在 IE8 中测试一些 JavaScrpt 代码时,我在执行一个简单的 for..in 循环时遇到了一些奇怪的行为:

var categories = ['for', 'bar', 'steam'];
for(var key in categories) {
    console.log(key);
}

输出:

0
1
2
forEach
map
filter
reduce
indexOf
end

其中包括 Array 原型(prototype)函数,对吗?这绝对不是它应该工作的方式。这是为什么?

顺便说一句,当将循环更改为 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它已关闭,因为无法修复,因为不需要订购属性

坚持使用标准循环

关于javascript - 为什么 for...in 循环遍历函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13082409/

相关文章:

html - 如何让文本始终位于 td 的左上角?

javascript - 使用 window.getSelection() 检查文本是否突出显示

javascript - 添加帮助弹出窗口

Java for循环获取X

javascript - 为什么这个 for 循环不起作用?

javascript - 如何遍历收缩数组

IE8的jquery浏览器检测

javascript - 如何降低图像加载的显着性?

javascript - 使用 Chrome 文件系统 API 时无法适应文件编码

ASP.NET App-设置IE7兼容模式吗?