10/27/2025, 1:00:00 PM
本文通过清晰的示例,阐述了 JavaScript 中可迭代对象与迭代器的区别,以及它们的协议、接口和实际应用。
本文摘自 'JavaScript for Everyone' 课程,旨在揭开可迭代对象和迭代器这些经常令人困惑的概念的神秘面纱。它定义了可迭代对象(如数组、Set、Map 和字符串)为遵循可迭代协议的对象,即在原型链中拥有 `[Symbol.iterator]()` 方法,从而支持 `for...of` 循环。迭代器则遵循迭代器协议,通过 `next()` 方法逐个顺序访问元素,该方法返回包含 `value` 和 `done` 属性的对象。作者强调,所有迭代器都是可迭代的,但内置的可迭代对象本身并非迭代器,而是*用于创建*迭代器对象。示例展示了 `Map.keys()` 等方法如何返回迭代器,以及如何通过 `[Symbol.iterator]()` 或 `Iterator.from()` 从可迭代对象手动创建迭代器。突出显示了一个关键区别:可迭代对象可以多次迭代,而迭代器维护内部状态,在单次完整遍历后即被“耗尽”或完成迭代。