迭代数组时是否应该使用for-of或forEach?

时间:2018-06-13 18:38:26

标签: javascript ecmascript-6

此外,这是一个风格问题还是一个功能性问题?是优先考虑还是更好?我试图了解for-of的目的。

通常我会用,

let iterable = [10, 20, 30];

iterable.forEach((val) => {
   console.log(val);
})

但我看到这种新语法可用。

let iterable = [10, 20, 30];

for (let value of iterable) {
  console.log(value);
}

可以提供一个最佳使用案例的示例吗?当一个人应该使用它时可能会发光吗?

2 个答案:

答案 0 :(得分:5)

这是一个非常有趣的问题,已在许多其他网站上讨论过。我将发布我读过的基础知识。

  

ForEach 完全属于阵列王室。 forEach方法引入了Array对象的原型继承的谱系!毋庸置疑,forEach子句仅适用于那些数组结构,即数组。该方法基本上遍历数组的元素并执行回调函数[基本上是一些可执行函数/有趣活动]。

  

for-of循环对于JS世界来说是一个新的东西,并且包含超级大国! Voilaaaaaaa! for-of循环创建一个循环遍历可迭代成员对象的循环。该列表是一个广泛的列表,如

  • 阵列
  • 地图
  • 字符串
  • TypedArray
  • 其他W3C课程
  

你需要知道这个坏孩子男孩在2015年诞生了ES6。因此,它提供了充分的使用灵活性

<强>性能

在效果方面,for...offorEach快。 Results can be found here

forEachfor...of

慢24%

更新

如上所述,W3C规范中还有其他几个可迭代类,如FileList。在最近的W3C草案中(当ES6发布时),像HTMLCollection和NodeList这样的集合现在也实现了forEach(),而不仅仅是Array。 @Patrick Roberts

来源链接:

答案 1 :(得分:3)

我建议始终在ES6中使用for … of

  • 适用于任何iterable
  • 它支持循环体中的各种控制流,如continuebreakreturnyieldawait

我个人觉得它更具可读性,但这取决于偏好。有些人认为forEach是一种更具功能性的风格,但这是错误的 - 它没有结果价值,而且都是关于做副作用的,所以一个看起来很重要的循环更适合这个目的。

表现不是问题,in modern engines all loop styles are equivalent