可迭代协议与 for...of
学习可迭代协议:Symbol.iterator、iterator.next(),以及在小型自定义示例中使用 for...of、展开语法和 Array.from
可迭代协议与 for...of 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 3 节课。
整体概览
目标:阅读并构建小型可迭代对象。
- 了解 iterable 的含义
- 了解 Symbol.iterator 和 iterator.next()
- 了解 for...of、展开、Array.from
- 构建一个 0..N 计数器示例

在内置对象上使用 for...of
for...of 可用于数组和字符串等内置可迭代对象,并按顺序产生其中的项目。
// Arrays and strings are iterable
const arr = [10, 20, 30];
for (const n of arr) {
console.log("arr item:", n);
}
const word = "JS";
for (const ch of word) {
console.log("char:", ch);
}

自定义可迭代对象
iterable 包含一个 [Symbol.iterator](),该方法返回一个迭代器,其 next() 会产生 { value, done }。
// A tiny iterable that counts 0..max-1
const Counter = {
make: function (max) {
return {
max: max,
// Symbol.iterator returns an iterator object
[Symbol.iterator]: function () {
let i = 0;
return {
next: function () {
if (i < max) {
const out = { value: i, done: false };
i = i + 1;
return out;
}
return { value: undefined, done: true };
}
};
}
};
}
};
for (const x of Counter.make(3)) {
console.log("count:", x);
}

手动迭代
在底层,for...of 会反复调用 next(),直到 done: true。
// You can drive the iterator manually
const iterable = Counter.make(2);
const it = iterable[Symbol.iterator]();
console.log(it.next()); // { value: 0, done: false }
console.log(it.next()); // { value: 1, done: false }
console.log(it.next()); // { value: undefined, done: true }

展开与 Array.from
展开和 Array.from 也会使用可迭代协议来收集值。
// Spread (...) and Array.from consume iterables
const small = Counter.make(4);
const a1 = [...small];
const a2 = Array.from(Counter.make(3));
console.log("spread:", a1);
console.log("from :", a2);

良好习惯
提示:
- 每次在 [Symbol.iterator] 中返回一个新的迭代器。
- 始终以 done: true 结束,以避免无限循环。
- 将状态保存在迭代器闭包内部。

可迭代协议测验
快速检查:让对象可迭代。

回顾
回顾:数组等内置对象是可迭代的。要创建自己的可迭代对象,请添加 [Symbol.iterator](),使其返回一个带有 next() 的迭代器。使用 for...of、展开或 Array.from 消费值。

常见问题解答
「可迭代协议与 for...of」课时是免费的吗?
是的 — 「可迭代协议与 for...of」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 3 节课。
「可迭代协议与 for...of」这节课中我会学到什么?
学习可迭代协议:Symbol.iterator、iterator.next(),以及在小型自定义示例中使用 for...of、展开语法和 Array.from 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。
「可迭代协议与 for...of」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 可迭代协议与 for...of
- 生成器函数、yield 与小型数据处理流程
- 异步迭代器——for await...of 与异步生成器