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()