📅  最后修改于: 2023-12-03 15:16:17.672000             🧑  作者: Mango
迭代器是JavaScript ES6引入的新特性,用于遍历数据结构(如数组、集合、映射等)中的元素。
迭代器是一个对象,它提供了访问集合中元素的接口,其中包含了一个next()方法。该方法返回一个包含两个属性的对象:done和value。done属性表示迭代器是否已遍历完所有元素,value属性表示当前迭代到的元素值。
下面是一个简单的迭代器示例,它可以遍历一个数组中的每个元素并输出到控制台:
let arr = [1, 2, 3];
let iterator = arr[Symbol.iterator]();
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
console.log(iterator.next().value); // 3
console.log(iterator.next().done); // true
在以上示例中,我们使用了数组的内置方法Symbol.iterator()来获取迭代器对象。然后我们可以通过调用next()方法来访问集合中的元素。
for...of 循环是迭代器的一个应用场景,它可以让我们更加方便地遍历一个集合中的所有元素。下面是一个使用 for...of 循环来遍历数组的示例:
let arr = [1, 2, 3];
for (let value of arr) {
console.log(value);
}
在以上示例中,我们可以直接使用 for...of 循环来遍历数组中的所有元素,而不用再手动获取迭代器对象并调用next()方法。
除了使用数组、集合等内置的数据结构,我们还可以自定义迭代器来使用。下面是一个自定义迭代器的示例:
let obj = {
data: [1, 2, 3],
[Symbol.iterator]() {
let current = 0;
let self = this;
return {
next() {
if (current < self.data.length) {
return { value: self.data[current++], done: false }
} else {
return { done: true }
}
}
}
}
};
for (let value of obj) {
console.log(value);
}
在以上示例中,我们使用了一个自定义对象来实现迭代器。在该对象中,我们定义了一个Symbol.iterator()方法,该方法返回一个包含next()方法的对象。在next()方法中,我们根据当前迭代到的元素位置是否小于数据长度来判断是否还有元素需要遍历。