# 迭代器的概念
迭代器是指具有next()方法
的对象,用于迭代可迭代对象中的元素。每次调用next()方法
都会返回一个包含value
和done属性
的对象,用于表示迭代器当前所指向的元素和迭代是否已经结束。
# 迭代器的实现
迭代器可以自定义实现,例如以下是一个简单的迭代器实现:
const myIterable = {
[Symbol.iterator]: function* () {
yield 1;
yield 2;
yield 3;
}
}
const myIterator = myIterable[Symbol.iterator]();
console.log(myIterator.next()); // { value: 1, done: false }
console.log(myIterator.next()); // { value: 2, done: false }
console.log(myIterator.next()); // { value: 3, done: false }
console.log(myIterator.next()); // { value: undefined, done: true }
2
3
4
5
6
7
8
9
10
11
12
13
14
以上代码中,myIterable
是一个自定义的可迭代对象,它具有Symbol.iterator方法
,返回一个生成器函数。生成器函数中使用yield语句返回可迭代对象中的元素。myIterator
是使用迭代器协议从myIterable
中获取的迭代器,每次调用next()方法
都会返回生成器函数中yield
语句返回的值。
# 迭代协议的概念和实现
迭代协议是指指定一个可迭代对象必须具有Symbol.iterator方法
的协议。该方法必须返回一个迭代器对象,用于迭代可迭代对象中的元素。实现迭代协议的对象可以使用for...of语句或手动迭代器来遍历可迭代对象中的元素。
以下是一个实现迭代协议的简单例子:
const myIterable = {
data: [1, 2, 3],
[Symbol.iterator]: function () {
let index = 0;
return {
next: () => {
if (index < this.data.length) {
return { value: this.data[index++], done: false };
} else {
return { done: true };
}
}
}
}
}
for (let element of myIterable) {
console.log(element);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
以上代码中,myIterable
是一个自定义的可迭代对象,具有Symbol.iterator方法
,返回一个迭代器对象。迭代器对象包含next()方法
,用于遍历可迭代对象中的元素。在for...of语句中使用myIterable对象时,会自动调用迭代器的next()方法,从而遍历可迭代对象中的元素。
总之,迭代器是指具有next()方法
的对象,用于迭代可迭代对象中的元素。迭代协议是指指定一个可迭代对象必须具有Symbol.iterator方法
的协议。实现迭代协议的对象可以使用for...of语句
或手动迭代器来遍历可迭代对象中的元素。