for forin forof forEach map区别

一、总结

  1. 相同点:都是串行遍历。
  2. 不同点:
    for forin forof forEach map区别_第1张图片

二、for of循环

  1. 设计目的:遍历所有数据结构的统一方法
  2. 原理:会调用数据结构的Symbol.iterator方法。
    • 只要数据结构定义了Symbol.iterator属性,就能用for of遍历它的成员。
    • 换句话说,只要能被for of遍历,数据结构上一定有Iterator接口。
  3. 适用范围:数组、set、map、类数组(arguments对象、Dom NodeList对象)、生成器对象、字符串。
  4. 可以中断(支持break/continue), 支持return。
  5. 数组的遍历器:只返回能通过数字下标访问的属性。

三、for in循环

  1. 为了遍历对象而设计。能够遍历数组的key。

  2. 缺点:

    • 数组的索引是数字,但是for in里拿到的键值是字符串。
    • for in还会遍历数组上挂载的其他属性;如果数组原型被重写(新增变量),还会访问到原型链上的值。
    • 特殊场景:如果对象键值是数字,则会按照键值的升序来遍历。

四、map forEach

相同点:

  1. 为了解决for遍历数组,写法太麻烦。
  2. 无法中途跳出循环。break、continue都不支持。

不同点:

  1. map支持return, 会新开辟内存接收返回值。
  2. forEach不支持return, 没有返回值。

你可能感兴趣的:(前端)