1. 迭代器(Iterator):
迭代器是一个具有 next() 方法的对象,该方法返回一个包含 value 和 done 属性的对象,用于表示迭代的当前结果。value 是当前迭代的值,done 是一个布尔值,表示迭代是否已完成。
以下是一个简单的迭代器示例:
const myIterable = {
data: [1, 2, 3],
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
return index < this.data.length
? { value: this.data[index++], done: false }
: { value: undefined, done: true };
}
};
}
};
// 使用迭代器
const iterator = myIterable[Symbol.iterator]();
console.log(iterator.next()); // 输出: { value: 1, done: false }
console.log(iterator.next()); // 输出: { value: 2, done: false }
console.log(iterator.next()); // 输出: { value: 3, done: false }
console.log(iterator.next()); // 输出: { value: undefined, done: true }
2. for...of 循环:
for...of 循环是一种在可迭代对象上进行迭代的语法糖。它可以遍历具有迭代器的对象,如数组、字符串、Map、Set 等。
const myIterable = [1, 2, 3];
for (const value of myIterable) {
console.log(value);
}
// 输出:
// 1
// 2
// 3
for...of 循环会自动调用迭代器的 next() 方法,直到 done 属性为 true 为止。这使得代码更简洁、可读,并且不需要手动管理迭代器的状态。
总体而言,迭代器和 for...of 循环提供了一种更灵活、更统一的方式来处理数据结构的遍历,使得代码更易于理解和维护。
转载请注明出处:http://www.zyzy.cn/article/detail/4677/ES6