ES8 浅谈 forEach() 和 for...of 循环的区别

阅读时长 4 分钟读完

前言

前端开发现在已经不再是单纯的写 HTML、CSS 和 JavaScript 这种狭隘的领域,而成为了一个完整的领域。ES6 提供了许多新特性,让 JavaScript 语言的表达力得到了极大的提升。而 ES8 又将这一推向更高的水平。在 ES8 版本中,提供了两种新的循环方式:forEach()for...of。虽然看似很类似,但在细节上却有所不同。本文主要从代码实例分析这两种循环的区别。

forEach() 和 for...of 的基本概念

在开始以前,我们先来看一下 forEach()for...of 两个关键字的基本概念。

forEach()

forEach() 是一种数组遍历迭代器,该方法可用于替代传统的 for 循环。forEach() 在处理数组时非常有用,因为它可以比普通 for 循环更快、更简洁地完成任务。

for...of

for...of 是一种用于遍历可迭代对象的新循环语法。在 ES8 中被引入,它可以循环遍历迭代器对象、字符串、Map、Set 等数据类型,而不仅仅是像 for...in 循环那样只适用于对象和数组。

两种循环的区别

虽然两种循环语法都有类似的功能,但它们之间仍有几点区别。

区别一:返回值

在使用 forEach() 方法时,在回调函数中返回任何值是没有任何效果的。换句话说,无论您在回调中返回什么,它都不会影响 forEach() 的返回值。而在 for...of 中,则可以使用 return 语句来提前停止循环,并在循环外部添加任意值的 yield 等表达式。

区别二:使用 continue 和 break

forEach() 方法中,我们没有办法使用 continuebreak 关键词来直接控制循环过程。但是,在 for...of 循环中,我们可以使用 continuebreak 来跳过循环的某些部分。

区别三:返回值的方式

在使用 for...of 时,可以通过反过来使用 generator 函数来返回数据,并在每次循环时依次返回新值。而在 forEach() 中,我们不可以使用此种方法来返回数据。

例如,我们可以使用以下代码在控制台上输出两个数组中的元素:

区别四:变量类型

forEach() 方法只接受一个匿名函数,而 for...of 则在声明循环变量时只会接受定义的变量名。

总结

forEach()for...of 循环的主要区别是它们在返回值、使用 continue 和 break、返回值的方式和变量类型方面有所不同。使用这两种语法时,因为它们的差异而避开一些问题也是很重要的。与 for in 语法相比,这两种语法为开发人员提供了更广泛的可能性。如果需要使用 continuebreak 关键词,或者想要在自己的回调函数中返回自己的数据表达式,则应该使用 for...of 循环。如果只是需要快速而简便地处理一些数组元素,那么 forEach() 可以是比较好的选择。

示例代码

forEach() 循环

for...of 循环

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646f0b49968c7c53b0d6dba6

纠错
反馈