for-of循环可直接遍历原生可迭代对象:数组按值遍历、字符串正确处理Unicode字符、Set去重遍历、Map默认遍历键值对、TypedArray/NodeList/arguments等也支持;普通对象不可直接遍历,需转为数组。

for-of 循环可以直接遍历所有原生实现了 [Symbol.iterator] 方法的内置可迭代对象,无需额外转换。
数组(Array)
最常用场景。直接按元素顺序遍历每个值,不暴露索引,语义清晰:
- const arr = [10, 20, 30];
- for (const item of arr) console.log(item); // 10, 20, 30
字符串(String)
按 Unicode 字符遍历,正确处理 emoji、复合字符等,比 for...in 或传统下标更可靠:
- const str = "??a";
- for (const char of str) console.log(char); // "??", "a"
Set 和 Map
Set 自动去重,遍历时只拿到唯一值;Map 默认遍历 [key, value] 数组,解构语法天然适配:
立即学习“Java免费学习笔记(深入)”;
- const set = new Set([1, 1, 2]); for (const v of set) console.log(v); // 1, 2
- const map = new Map([['x', 10], ['y', 20]]); for (const [k, v] of map) console.log(k, v); // 'x' 10, 'y' 20
其他原生可迭代对象
包括 TypedArray(如 Uint8Array)、NodeList(DOM 查询结果)、arguments(旧式函数参数类数组),都可直接用 for-of:
- const divs = document.querySelectorAll('div'); for (const el of divs) el.classList.add('active');
- function fn() { for (const arg of arguments) console.log(arg); }
普通对象(plain object)默认不可遍历,直接使用会报 TypeError: obj is not iterable。如需遍历属性,应先用 Object.keys()、Object.values() 或 Object.entries() 转为数组。


















