即循环中的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的闭包特性 如何给循环中的对象添加事件