for...of 是 es6 引入的语法糖,专为遍历可迭代对象(如数组、字符串、map、set 等)设计,自动调用 symbol.iterator 并反复执行 next() 直至 done 为 true。

for...of 是 ES6 引入的语法糖,专为遍历可迭代对象(如数组、字符串、Map、Set 等)设计。相比传统 for (let i = 0; i ,它直接暴露元素值,省去下标管理和边界计算,代码更贴近“意图”,自然提升可读性。
直接操作元素,不关心索引
当业务逻辑只依赖当前项内容,无需下标时,for...of 让代码一眼看懂“我在处理什么”:
- 传统写法:
for (let i = 0; i - for...of 写法:
for (const item of items) { console.log(item.name); }
后者没有 i、length、[] 这些干扰项,语义干净——“对每个 item,打印它的 name”。
天然兼容多种数据结构
同一套语法可安全用于数组、类数组、字符串、Map、Set,无需额外封装或判断类型:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
for (const char of "hello") { console.log(char); }→ 逐字符输出 -
for (const [key, value] of new Map([['a', 1], ['b', 2]])) { console.log(key, value); }→ 解构键值对 -
for (const num of new Set([1, 2, 2, 3])) { console.log(num); }→ 自动去重遍历
传统 for 循环无法直接遍历 Map 或 Set,必须转成数组,多一层转换就多一分理解成本。
配合解构和 await 使用更自然
在需要解构或异步处理的场景中,for...of 的表达力更强:
- 解构数组项:
for (const [id, name] of users) { /* 处理 id 和 name */ } - 异步遍历(需在 async 函数内):
for (const url of urls) { const res = await fetch(url); }
传统 for 循环里做解构要写 const [id, name] = users[i],await 则容易误写成 await fetch(urls[i]),下标出错风险更高。
注意边界:不适用于需要索引或修改原数组的场景
for...of 不提供索引,也不支持中途修改循环变量来跳过或重复某次迭代。如果必须用索引(比如对比前后元素),或需要 break/continue 基于下标逻辑,传统 for 或 forEach+findIndex 可能更合适。但多数日常遍历需求,它更简洁、安全、易维护。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










