随着ECMAScript 2015(ES6)中引入了for..of,是否还有理由继续推荐使用稍旧的Array.prototype.forEach()
?
今天写在ES6中的很多代码都包含如下代码:
let sum = 0;
values.forEach((value) => {
sum += value;
});
在几乎所有这些情况下,都可以使用等效的 for..of 循环代替:
let sum = 0;
for (let value of values) {
sum += value;
}
这两种格式的更简洁版本:
values.forEach(value => sum += value);
for (let value of values) sum += value;
< p > for..of 格式不仅适用于 Array
对象,还适用于其他可迭代对象,并且更加高效。与 Array.prototype.map()
不同,.forEach()
也没有返回值,无法进行进一步的链接。
它可能在调用链的末尾更易读,因此更有用(如下面的示例),或者如果每个项目都应用于未知回调。除了这些边缘情况外,它是否应该被避免?
['1', '2', 3].map(Number)
.forEach(value => sum += value)
for...of
是ES6的特性,一些不稳定的浏览器都不支持这两个选项。 - ssubeforEach
的用例(你知道,副作用是不好的),在ES6中它肯定不会更有用。 - Bergi