Iterator和for...of
/ / 点击 / 阅读耗时 2 分钟Iterator(遍历器)
为各种不同的数据结构提供统一的访问机制。
任何数据结构只要部署了Iterator接口,就可以完成遍历操作。
遍历操作:依次处理该数据结构的所有成员。
遍历过程
创建一个指针对象,指向当前数据结构的起始位置。
第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
第二次调用指针对象的next方法,可以将指针指向数据结构的第二个成员。
不断调用指针对象的next方法,直到它指向数据结构的结束位置。
for…of循环
使用for…of循环遍历某种数据结构时,该循环会自动寻找这种数据结构默认的遍历器接口。
默认的遍历器接口部署在数据结构的Symbol.iterator属性上。
即只要一个数据结构具有Symbol.iterator属性,就认为是可遍历的(iterable)。
Symbol.iterator属性是一个函数,执行这个函数会返回一个遍历器。
原生具备Iterator接口的数据结构
- Array
- Map
- Set
- String
- TypedArray
- arguments
- NodeList
除了for…of,其他会调用默认遍历器接口的情况
- 结构赋值
- 扩展运算符
- yield*
- Array.from()
- Map(), Set(), WeakMap(), WeakSet()
- Promise.all()
- Promise.race()
Iterator接口最简单实现
为Symbol.iterator创建一个Generator函数。