for...of 是语法结构,支持所有可迭代对象且可中断;foreach 是数组方法,仅适用于可迭代对象但无法用 break/continue 中断。

for...of 和 forEach 都能遍历数组,但它们本质不同:forEach 是数组方法,只能用于可迭代对象(如数组、Set、Map),且无法用 break 或 continue 中断;而 for...of 是语法结构,支持所有可迭代对象,天然支持中断、跳过、返回值控制,更灵活也更接近传统循环逻辑。
基础写法对比:从 forEach 到 for...of
假设有一个数组:
const arr = ['a', 'b', 'c'];用 forEach:
arr.forEach(item => console.log(item));等价的 for...of 写法是:
for (const item of arr) {console.log(item);
}
注意:for...of 默认遍历的是元素值,不提供索引。如需索引,可用 entries() 或配合 let i = 0 手动计数。
处理索引和值:用 entries() 获取键值对
forEach 回调函数默认接收 (item, index),for...of 可通过 arr.entries() 达到同样效果:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
console.log(index, item); // 0 'a', 1 'b', 2 'c'
}
entries() 返回一个可迭代对象,每次产出形如 [index, value] 的数组,解构赋值即可直接使用。
提前退出或跳过某次循环
这是 forEach 完全做不到的,但 for...of 天然支持:
- 用
break提前结束整个循环 - 用
continue跳过当前项,进入下一轮 - 在函数中可用
return直接退出(若 for...of 在函数体内)
例如:找到第一个大写字母就停止
const chars = ['x', 'Y', 'z', 'A'];for (const char of chars) {
if (char === char.toUpperCase() && char !== char.toLowerCase()) {
console.log('找到大写:', char);
break;
}
}
兼容性与注意事项
for...of 是 ES2015(ES6)特性,现代浏览器和 Node.js(v4+)均支持。若需兼容老环境(如 IE),不能直接使用,需转译(如 Babel)或改用传统 for 循环。
另外注意:
– for...of 不能直接遍历普通对象(Object),因为 Object 默认不可迭代;
– Map、Set、String、TypedArray 等都原生支持 for...of;
– 数组的 keys()、values()、entries() 方法返回的都是可迭代对象,均可用于 for...of。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










