JavaScript For Everyone:迭代器 - Smashing Magazine

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()` 从可迭代对象手动创建迭代器。突出显示了一个关键区别:可迭代对象可以多次迭代,而迭代器维护内部状态,在单次完整遍历后即被“耗尽”或完成迭代。

💡 主要观点

  1. 可迭代对象和迭代器在 JavaScript 中遵循不同的协议和接口。 可迭代对象通过 `[Symbol.iterator]()` 方法实现可迭代协议,支持 `for...of` 循环;迭代器则通过 `next()` 方法实现迭代器协议,支持顺序元素访问。
  2. 所有迭代器都是可迭代的,但内置的可迭代对象用于生成迭代器,而非自身作为迭代器。 数组等可迭代对象在调用 `[Symbol.iterator]()` 时,会返回一个新的迭代器对象,用于遍历。
  3. 迭代器维护内部状态,具有单次使用特性,与可重复迭代的可迭代对象不同。 一旦迭代器产生所有值且 `done` 变为 `true`,它便无法重置或重新迭代,代表一次完整的迭代过程。

💬 文章金句

📊 文章信息

AI 评分:87
来源:Smashing Magazine
作者:hello@smashingmagazine.com (Mat Marquis)
分类:产品设计
语言:英文
阅读时间:8 分钟
字数:1833
标签: JavaScript, 迭代器, 可迭代对象, 迭代协议, ES6+
阅读完整文章

阅读原文 QR Code 返回目录