JS中iterable和iterator的区别

iteratoriterable 是 JavaScript 中与迭代相关的两个概念,它们之间有一些关键的区别。

Iterable(可迭代对象)

  • 定义: 可迭代对象是实现了 Symbol.iterator 方法的对象。这个方法返回一个迭代器对象。
  • 特点: 可迭代对象可以被用于 for...of 循环,其中迭代器对象负责定义迭代的顺序。
  • 示例: 数组、字符串、Map、Set 等都是可迭代对象,因为它们都实现了 Symbol.iterator 方法。
let iterableObject = {
  [Symbol.iterator]: function () {
    // 返回迭代器对象的逻辑
  }
};

Iterator(迭代器)

  • 定义: 迭代器是一个对象,它实现了 next 方法,该方法返回一个包含 valuedone 属性的对象。
  • 特点: 迭代器负责跟踪迭代的状态,提供下一个值,并指示迭代是否已经完成。
  • 示例: 通过调用可迭代对象的 Symbol.iterator 方法获得迭代器对象。
let iteratorObject = {
  next: function () {
    // 返回 { value, done } 对象的逻辑
  }
};

综合起来,一个对象要成为可迭代对象,它需要实现 Symbol.iterator 方法,而这个方法返回一个迭代器对象。迭代器对象则需要实现 next 方法,以便在迭代过程中提供下一个值。

在使用 for...of 循环时,它会自动调用对象的 Symbol.iterator 方法,获取迭代器对象,然后重复调用迭代器对象的 next 方法,直到 done 的值为 true,表示迭代结束。

最后更新于 2023-11-17 16:31:00 by twotwolucky

发表评论