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 或传统下标更可靠:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- const str = "??a";
- for (const char of str) console.log(char); // "??", "a"
Set 和 Map
Set 自动去重,遍历时只拿到唯一值;Map 默认遍历 [key, value] 数组,解构语法天然适配:
- 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() 转为数组。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










