Skip to content
本页目录

Iterator 遍历器

介绍

JS “集合”的数据结构:Array Object Map Set , Iterator 就是新增一种给这四种不同类型的集合统一访问的机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。

Object 是没有部署 Iterator 接口的,所以它不能使用 for...of 遍历

作用

  • 为各种数据结构,提供一个统一的、简便的访问接口;
  • 使得数据结构的成员能够按某种次序排列;
  • for...of 消费(主要作用)

ES6 规定,默认的 Iterator 接口部署在数据结构的 Symbol.iterator 属性,或者说,一个数据结构只要具有 Symbol.iterator 属性(这个属性必须是无参数的函数),就可以认为是“可遍历的”(iterable)。

判断条件简单可写为:

JS
typeof obj[Symbol.iterator] === 'function'
typeof obj[Symbol.iterator] === 'function'

原生具备 Iterator 接口的数据结构如下。

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函数的 arguments 对象
  • NodeList 对象

调用 Iterator 接口的场合

  • 解构赋值
  • 扩展运算符
  • for...of
  • Array.from()
  • Map(), Set(), WeakMap(), WeakSet()(比如 new Map([['a',1],['b',2]] ))
  • Promise.all()
  • Promise.race()