任何数据结构只要部署Iterator接口,就可以完成遍历操作,ES6提供for...of循环
Iterator 接口是一个内置的对象,它定义了一种标准的方式来遍历集合(如数组、对象、Map、Set等)的元素。一个实现了Iterator接口的对象必须提供一个next()方法,该方法返回一个具有两个属性的对象:value 和 done。
value:表示当前迭代的元素的值。done:是一个布尔值,表示迭代是否完成。当没有更多的元素可以迭代时,done将为true。
迭代器(Iterator) :
迭代器是一种对象,它为访问集合元素提供了一种方式,同时避免了直接暴露集合的内部结构。迭代器对象拥有一个next()方法,每次调用这个方法都会返回集合中的下一个元素,直到所有元素都被遍历完毕。如果没有更多的元素可供遍历,next()方法会返回一个特殊的值(通常是undefined)。迭代器的实现方式通常是通过定义一个对象,该对象包含一个next()方法和一个done属性。done属性表示是否还有更多的元素需要遍历,如果还有,done属性为false,否则为true。
迭代器的主要应用是遍历可迭代对象,如数组、字符串、Map、Set等。使用for...of语法结构可以方便地遍历这些对象。
const myIterator = {
from: 1,
to: 5,
current: 1,
next() {
if (this.current <= this.to) {
return { value: this.current++, done: false };
} else {
return { value: undefined, done: true };
}
}
};
// 使用for...of循环遍历迭代器
for (let value of myIterator) {
console.log(value); // 输出:1, 2, 3, 4, 5
}
具有Iterator接口的数据
- array
- arguments
- set
- map
- string
- typedArray
- NodeList
for...in 循环索引
for...of 循环键值
工作原理
创建一个指针对象,指向数据结构的起始位置
第一次调用对象的next()方法,指针自动指向数据结构的第一个数据成员
接下来不断的调用next()方法,直到指向后一个成员
每次调用next()方法,返回value和done属性的对象
done为true结束遍历