gpt4 book ai didi

javascript - 是否有理由在 ES6 中使用 array.forEach() 而不是 for...of,当两者都可以使用时?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:08 25 4
gpt4 key购买 nike

for..of在 ECMAScript 2015 (ES6) 中引入,是否有任何理由继续提倡使用稍旧的 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;

for..of 格式不仅适用于 Array 对象,也适用于其他可迭代对象,并且性能更高。与 Array.prototype.map() 不同,.forEach() 也没有允许进一步链接的返回值。

可以想象,它可能更具可读性,因此在调用链的末尾(下面的示例)或者如果每个项目都应应用于未知回调时很有用。撇开那些边缘情况不谈,难道不应该避免吗?

['1', '2', 3].map(Number)
.forEach(value => sum += value)

最佳答案

最重要的区别是您不能在不抛出的情况下从 forEach 中断,这是使用异常进行流量控制,因此是一种不好的做法。

对于总是会触及每个元素的数组循环,for ... offorEach 是相当等价的。但是,如果您有一个保证命中每个元素一次的循环,您可能可以使用 mapreduce 代替任何 for-each 结构并使事情更实用.

您的求和示例非常适合reduceforEach 不是最好的选择,当你可以使用:

let sum = values.reduce((sum, value) => sum + value, 0);

如果你想从数组中挑选元素,你通常可以使用filter。对于流量控制,everysome 可以工作,必要时进行反转(如评论中所述)。

一般情况下,forEach 通常可以用更具描述性和特化的数组方法代替,除非您特别需要引起副作用。 for...of 对于可迭代对象非常有用,但并不总是数组的最佳选择。

关于javascript - 是否有理由在 ES6 中使用 array.forEach() 而不是 for...of,当两者都可以使用时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31344516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com