迭代器是一种机制,也是一种接口,只要实现了这种接口就可以通过for..of来遍历,任何数据结构部署有Iterator接口都可以完成遍历操作
1.Iterator的三个作用:
1.为各种数据结构提供统一简便的访问接口
2.让数据结构的成员以某种次序排列
3.Iterator接口主要供for...of消费
2.Iterator的遍历过程
1.创建一个指针对象,指向数据结构起始位置,遍历器对象本质上是一个指针对象
2.第一次调用指针对象next方法,可以将指针指向数据结构的第一个成员
3.第二次调用则指向第二个,不断调用next方法则到指向数据结构结束位置
3.通过一个案例描述迭代器
let arr = [1, 2, 3, 4, 5]
console.log(arr.keys());
console.log(arr.values());
console.log(arr.entries());
// 当前对象就是迭代器对象
let str = 'hello'
for (let key of str) {
console.log(key);
}
// 遍历迭代器对象
let keys = arr.keys()
for (let key of keys) {
console.log(key);
}
let values = arr.values()
for (let value of keys) {
console.log(value, '--');
}
let entries = arr.values()
for (let entry of keys) {
console.log(entry);
}
for-of实现原理就是调用迭代器的next()方法,第一次调用将指针指向数据结构的第一个成员,依次调用依次指向,直到没有成员可以指向,done为true