即循环中的javascript与循环中的chrome [重复]

Posted

技术标签:

【中文标题】即循环中的javascript与循环中的chrome [重复]【英文标题】:ie javascript for in loop vs chrome for in loop [duplicate] 【发布时间】:2015-03-30 06:00:32 【问题描述】:
var arr=["test"]; for(var e in arr) console.log(e);

在 IE11 的控制台中输出:

0 包含 remove clear add addAll(所有属性)

并且在 chrome 的控制台中只输出0,这是预期的。

如何在 IE 中修复它?我知道我可以使用for(var i=0;i<arr.length;i++) 来解决它。 但我只是想知道为什么 IE 会输出所有属性。

【问题讨论】:

@ssube 问题是重复的,不是答案。即使 answer 相同,也仅在 question 相同时关闭重复项。 @MattBall 修正了我的评论措辞。这个问题的措辞不同,但是是同一个问题。不太确定这是否是骗局,就在边缘。 如果您通过 Object.defineProperty 添加属性,您可以防止它们在列表中被枚举。 IE 做得对。 该页面很可能为 IE 中不存在的属性创建了一些 polyfill。 for..in 也有望迭代原型链中的属性。如果 Chrome 不迭代它们(我对此表示怀疑),那显然是 Chrome 中的一个错误。 【参考方案1】:

使用 IE11,我觉得没问题

如果你想要更多的控制使用Array.prototype.forEach 方法。它接受一个具有三个参数的回调。它们是元素,它们的索引和数组本身。试试

var arr=["test",'ball'];arr.forEach(function(element,index)
   console.log(index);
);

【讨论】:

【参考方案2】:

使用hasOwnProperty 方法。

例子:

var arr = ["test"];
for (var e in arr) 
    if (arr.hasOwnProperty(e)) 
        console.log(e);
    

很好地解释了为什么这是必要的:https://***.com/a/12017703/1387396

有关hasOwnProperty 方法及其在for .. in 循环中的使用的详细信息:Object.prototype.hasOwnProperty() - javascript | MDN

【讨论】:

以上是关于即循环中的javascript与循环中的chrome [重复]的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序的JavaScript实现

JavaScript:while循环中的异步方法

深入理解JavaScript的闭包特性 如何给循环中的对象添加事件

深入理解JavaScript的闭包特性如何给循环中的对象添加事件

如何在R中的循环中运行(更改)JavaScript文件?

游戏开发之旅-JavaScript事件循环