for...of用于遍历可迭代对象(如数组、字符串、Map、Set等)的元素值,要求对象实现Symbol.iterator方法;它直接获取值,不遍历键名或索引,比for...in更安全且语义清晰。

for...of 是 JavaScript 中专门用于遍历可迭代对象(iterable)的循环语法,它直接获取元素值,不关心索引或键名,比 for...in 更安全、语义更清晰。
哪些对象可以用 for...of?
只要对象实现了 Symbol.iterator 方法,就是可迭代的。常见包括:
- 数组(
[]) - 字符串(
"abc") - Map 和 Set
- arguments 对象(函数内)
- TypedArray(如
Uint8Array) - 自定义对象(手动添加
[Symbol.iterator]())
基本用法:直接取值,简洁明了
语法是 for (const value of iterable) { ... },每次循环得到一个元素本身:
const arr = [10, 20, 30];
for (const num of arr) {
console.log(num); // 依次输出 10、20、30
}
const str = "hi";
for (const char of str) {
console.log(char); // 输出 'h'、'i'
}
const map = new Map([['a', 1], ['b', 2]]);
for (const [key, value] of map) {
console.log(key, value); // 解构自动支持,输出 'a' 1、'b' 2
}
和 for...in 的关键区别
for...in 遍历的是对象的可枚举属性名(包括继承的),而 for...of 遍历的是对象的迭代值(只对可迭代对象有效):
立即学习“Java免费学习笔记(深入)”;
- 对数组用
for...in→ 得到字符串索引"0"、"1";用for...of→ 得到实际元素10、20 - 普通对象(如
{x:1, y:2})默认不可迭代,for...of会报错;for...in可以遍历(但不推荐) - Map/Set 用
for...of天然友好;for...in对它们无效(没可枚举属性)
配合 break、continue 和解构使用很自然
支持所有循环控制语句,也支持数组/元组解构:
const entries = [['name', 'Alice'], ['age', 30]];
for (const [key, value] of entries) {
if (key === 'age') continue;
console.log(`${key}: ${value}`); // 只输出 name: Alice
}
const colors = ['red', 'green', 'blue'];
for (const color of colors) {
if (color === 'green') break;
console.log(color); // 输出 red,然后停止
}


















