迭代器
定义:迭代器(iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据解构只要不是 iterator 接口,就可以完成遍历操作
1. ES6 创造了一种新的遍历命令 for...of 循环,iterator 接口主要供 for...of 消费
2. 原生具备 iterator 接口的数据( 可用 for...of 遍历 )
// Array、Arguments、Set、Map、String、TypedArray、NodeList
3. 工作原理
// 1. 创建一个指针对象,指向当前数据结构的起始位置
// 2. 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员
// 3. 接下来不断调用 next 方法,指针一直向后移动,直到指向最后一个成员
4. 例子
// 声明一个数据
const xiyou = ['唐僧', '孙悟空', '猪八戒', '沙僧']
// 使用 for...of
for(let v of xiyou) {
console.log(v) // 打印的是键值,如:唐僧,孙悟空,猪八戒,沙僧
}
// 使用 for...in
for(let v in xiyou) {
console.log(v) // 打印的是键名,如:0, 1, 2, 3
}
5. 迭代器自定义遍历对象
const obj = {
name: '小米',
phoneType: ['小米note', '小米6', '小米9', '小米10', '小米MAX'],
[Symbol.iterator]() {
let index = 0
return {
next: () => {
return index < this.phoneType.length ? { value: this.phoneType[index++], done: false} : { value: undefined, done: true}
}
}
}
}
for (const iterator of obj) {
console.log(iterator)
}
// 小米note
// 小米6
// 小米9
// 小米10
// 小米MAX