JavaScript循环分基础、对象/数组专用、函数式三类,控制流程依赖条件判断与break/continue/标签语句等;for适合精确控制,forEach/map/filter用于遍历转换筛选。

JavaScript 中的循环类型主要解决“重复执行代码”的需求,按用途和语法可分基础循环、对象/数组专用遍历、函数式遍历三类。控制流程则依赖条件判断、跳转语句和作用域机制,关键在于明确“何时开始、何时继续、何时跳出”。
基础结构型循环
适用于通用重复逻辑,强调手动控制执行次数或条件:
-
for 循环:适合已知迭代次数或需精确控制索引的场景。语法包含初始化、条件判断、更新三部分,例如
for (let i = 0; i 。注意变量作用域(let声明具有块级作用域,var会提升)。 - while 循环:先判断条件再执行,适用于条件驱动型重复,比如等待某个异步状态就绪。若初始条件为假,则一次都不执行。
- do...while 循环:至少执行一次循环体,再判断是否继续。适合需要“先尝试、再确认”的逻辑,如用户输入校验。
面向数据结构的遍历循环
专为数组、对象、字符串等内置类型设计,语义更清晰,减少手动索引管理:
-
for...in:遍历对象的**可枚举属性名**(包括继承属性),返回的是字符串类型的键。遍历数组时得到的是索引字符串,但不推荐——它不保证顺序,且可能遍历到原型链上的属性。安全做法是配合
hasOwnProperty()过滤。 -
for...of:遍历**可迭代对象的值**(Array、String、Map、Set、TypedArray 等)。不能用于普通对象(无 Symbol.iterator 接口)。支持
break/continue,语义简洁直接。
数组高阶方法(函数式遍历)
以声明式方式操作数组,返回新数组或产生副作用,不改变原数组(除 forEach 仅执行外):
立即学习“Java免费学习笔记(深入)”;
-
forEach():对每个元素执行回调,无返回值(返回
undefined)。不能用break或return中断整个循环,只能用throw模拟退出(不推荐)。 -
map():对每个元素调用回调,返回一个**新数组**,长度与原数组一致。常用于数据转换,如
[1,2,3].map(x => x * 2)→[2,4,6]。 -
filter():返回满足条件的新数组。适合筛选逻辑,如
[1,2,3,4].filter(x => x > 2)→[3,4]。
循环流程控制的关键手段
无论使用哪种循环,都可通过以下方式干预执行流:
- break:立即终止当前最内层循环,跳出整个循环体。在嵌套循环中只影响所在层级。
- continue:跳过本次循环剩余语句,直接进入下一轮判断或迭代。
-
标签语句(label):配合
break或continue使用,可跳出多层嵌套。例如:outer: for (...) { inner: for (...) { break outer; } }。 -
异常中断:在
forEach等无法用break的场景,可用try/catch抛出自定义错误实现提前退出(属非常规方案)。











