关于javascript:迭代数组时应该使用for或foreach吗?

Should one use for-of or forEach when iterating through an array?

本问题已经有最佳答案,请猛点这里访问。

另外,这是一个风格问题还是一个功能性问题?这是一个偏好问题还是一个更好的问题?我想知道的目的。

通常我用,

1
2
3
4
5
let iterable = [10, 20, 30];

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

但是我看到这个新的语法是可用的。

1
2
3
4
5
let iterable = [10, 20, 30];

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

你能提供一个最佳使用案例的例子吗?当你应该使用它的时候,它可能会亮起?


这是一个非常有趣的问题,已经在许多其他网站上讨论过。我会把我所读到的基本内容贴出来。

ForEach exclusively belong to the royal family of Arrays. The forEach method was introduced with lineage to the prototypal inheritance of Array object! Needless to say, the forEach clause works only with those data structure which are Arrays. The method basically iterates over the elements of the array and executes a callback function [basically some executable function/ fun activity].

The for-of loop is adequately new to the JS world and packs in super-powers! Voilaaaaaaa! The for-of loop creates a loop iterating over iterable member objects. The list is an extensive one such as

  • 数组
  • 地图
  • 集合
  • 达达雷
  • 其他W3C类

You need to know that this bad-ass boy emerged with the birth of ES6 in 2015. So, it offers plenty of flexibility in usage

性能

在性能上,for...offorEach快。结果可以在这里找到

forEachfor...of慢24%。

更新

W3C规范中还有其他几个可ITerable类,如filelist,如我前面提到的。在最近的W3C草案中(大约在ES6发布的时候),像htmlcollection和nodelist这样的集合现在也实现了foreach(),不再只是数组了。作者:@patrick roberts

源链接:

  • https://codeburst.io/foreach-vs-for-of-vs-for-in-tug-of-for-d8f935396648
  • https://www.reddit.com/r/javascript/comments/4spd5b/forof_vs_foreach/


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

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

我个人也觉得它更易读,但这取决于偏好。有些人认为forEach是一种功能性更强的风格,但这是错误的——它没有结果价值,而且都是关于做副作用的,所以一个命令式的循环更适合这个目的。

性能不是问题,在现代发动机中,所有的回路样式都是等效的。