1.for语法循环最简单,它没有任何额外的函数调用和上下文;
2.forEach函数签名更为复杂
array.forEach(function(currentValue, index, arr), thisValue),有诸多参数和上下文在执行时需考虑,性能可能减弱;
3.for循环使用break跳出整个循环,forEach不行只能用throw catch中断;
for循环可控制循环起点i,forEach只能默认从0开始;
for循环可在循环中修改i,forEach不行(底层隐式控制index 自增,无法操作)。
跳出for循环的三种方法?
1.return:是跳出for循环,且不执行for循环之外的语句,直接跳出当前函数,返回return后的值;
2.continue:是跳出当前循环,即不执行continue后的语句,直接进入下次循环;
3.break:是跳出for循环本身,不再进行之后的循环,但可以执行for循环之外的语句。
那么遍历,迭代,可迭代对象分别是什么呢?
遍历:指的对数据结构的每一个成员进行有规律的且为一次访问的行为。
迭代:迭代是递归的一种特殊形式,是迭代器提供的一种方法,默认情况下是按照一定顺序逐个访问数据结构成员。迭代也是一种遍历行为。
可迭代对象:ES6中引入了 iterable
类型,Array
Set
Map
String
arguments
NodeList
都属于 iterable
,他们特点就是都拥有 [Symbol.iterator]
方法,包含他的对象被认为是可迭代的 iterable。
forEach
其实是一个迭代器,他与 for
循环本质上的区别是 forEach
是负责遍历(Array
Set
Map
)可迭代对象的,而 for
循环是一种循环机制,只是能通过它遍历出数组。
什么是迭代器?迭代器(Iterator)是一种遍历任何可迭代对象(Iterable)的通用接口。迭代器是ES6规范中引入的一种新的数据类型,用于遍历各种数据结构,包括数组、对象、Map、Set等。在语言层面上,迭代器可以被看做一个有next方法的对象,每次调用next方法都可以返回一个值对象(Value)和一个布尔值(Done),表示是否遍历结束。其中,Value代表当前迭代项的取值,Done代表迭代是否结束。
遍历和迭代的区别?
简单的说:
遍历:就是走一遍
迭代:走n遍,反反复复
专业的说:
迭代就是重复运行一段代码语句块,分为两种方式
1.使用递归函数
2.使用循环(for 或 while 循环)