for...of vs for 循环全面对比【前端JS】

冲就完了

目录

引言

在 JavaScript 中,我们经常需要遍历数组或其他集合对象。常见的写法有两种:for...of 和传统的 for 循环。虽然两者都能实现遍历功能,但它们的应用场景、性能和语法风格都有明显差异。

基本语法

for...of 遍历元素

javascript 复制代码
const arr = [1, 2, 3, 4];

for (const item of arr) {
  console.log(item);
}

传统 for 循环

javascript 复制代码
const arr = [1, 2, 3, 4];

for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}

应用场景对比

用途 / 场景 推荐写法 原因
✅只需要遍历元素 for of 语法简洁,可读性强
✅性能敏感(大循环) for (let i=0; i<...) CPU 更快,没有迭代器开销
✅需要访问索引 for (let i=...) 有 i 可用
✅需要修改原数组元素 for (let i=...) 直接按索引修改
✅遍历字符串、Set、Map for of 专门为可迭代对象设计
✅异步遍历串行执行 for of await 可同步顺序处理异步任务
❌跳过、continue、break for (let i=...) for of 虽然支持但不直观
⚠️遍历对象 for of 不适用 需要 for inObject.keys()

优缺点分析

for...of

优点:

  • 语法简洁,专门用于迭代可迭代对象(Array、Set、Map、String)
  • 避免下标越界问题
  • 支持 for of await 异步串行操作

缺点:

  • 没有索引,需要额外方法获取索引
  • 性能略慢,尤其在大数组中,因为背后使用了迭代器
  • 不适合直接修改原数组元素

传统 for 循环

优点:

  • 性能高,特别是大数组循环时
  • 获取索引
  • 灵活操作数组(修改、跳过、提前退出)

缺点:

  • 语法相对冗长
  • 遍历 Set、Map、字符串需额外操作

性能对比

在百万级数组循环测试中

javascript 复制代码
const arr = Array.from({ length: 1000000 }, (_, i) => i);

console.time('for-loop');
for (let i = 0; i < arr.length; i++) {}
console.timeEnd('for-loop');

console.time('for-of');
for (const item of arr) {}
console.timeEnd('for-of');

结果:for 循环最快;for...of 略慢;forEach 最慢(回调开销 + 无法 break)

实战选择指南

  • 只遍历元素,追求简洁 → for...of
  • 需要索引、修改数组、性能敏感 → for
  • 异步顺序处理 → for...of await
  • 遍历对象 → for in 或 Object.keys()

结论

建议使用,但是在实际开发中,可以根据项目需求灵活选择,不必局限于单一写法。

  • for...of:现代语法,语义清晰,适合普通数组、Set、Map和字符串遍历。
  • for 循环:经典、性能最优,灵活可控,适合大数据量或需要索引操作场景。
相关推荐
知识分享小能手10 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn089511 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
IT_陈寒11 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端
Blanche150011 小时前
利用 RAG 为答疑机器人扩展知识范围
前端
天若有情67311 小时前
【纯前端小工具】公历生日转农历,批量查询每年农历生日对应的公历日期(GitHub Pages在线直接用)
前端·javascript·github pages·农历转换·lunisolar·网页小工具
SoonITer11 小时前
怎样构建一个 Agent-friendly 的网站
前端·agent
阿里嘎多学长11 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
颜进强11 小时前
01 · NestJS 是什么:用途、解决什么问题、与热门框架对比
前端·后端·ai编程
wendZzoo11 小时前
前端工程师的 3D 第一课:一个模型如何进入网页
前端
颜进强12 小时前
04 · NestJS 依赖注入:你在 `@Module` 写的 providers,和构造参数里那个类型,是怎么"对上"的?
前端·后端·ai编程