ES6 引入了迭代器(Iterator)和 for...of 循环,用于更灵活地遍历数据结构。这种方式在处理集合类对象时提供了一种统一的接口,使得可以使用相同的语法进行遍历操作。

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