JavaScript中代替"for each"循环的方法

17
根据 MDN 页面上的 for each...in 循环,这个结构已经被弃用了。有没有完全相同的替代方案?for...of 循环 不会迭代非整数(自身可枚举)属性。如果没有替代方案,为什么要弃用它呢?

这里提出了一个很好的观点:链接 - noel
3个回答

17

要遍历对象obj的所有属性,可以这样做:

for (var key in obj) {
   console.log(key, obj[key]);
}

如果你希望避免继承属性,可以这样做:

for (var key in obj) {
   if (!obj.hasOwnProperty(key)) continue;
   console.log(key, obj[key]);
}

13

您可以使用新的ECMAScript第5版函数:

Object.keys(obj).forEach(function (key) {
    console.log(key, obj[key]);
});

5
这是我解决eslint在使用for...in语句时出现“no-restricted-syntax”错误的方法。 - pherris

4

有没有其他的替代方法可以达到同样的效果?

使用 for ... in 循环,在循环代码块中首先将 foo[propertyname] 拷贝到一个变量中。


1
是的,我想只有这个解决方法了,但它并不能真正替代“for each”语句。所以他们不应该将其弃用,对吧? - user1537366
@Benedictus — 不是的。这是JavaScript 1.0版本。Netscape 2支持它! - Quentin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接