forEach是专用于遍历数组的高阶函数,依次执行回调但返回undefined且不支持break;适用于只读副作用操作,不适用于需返回新数组、筛选、累加、查找或中断的场景。

JavaScript 的 forEach 是专门用来遍历数组的方法,它会依次对数组的每个元素执行一次你提供的函数,但不会返回新数组(返回 undefined),也不支持中断(比如不能用 break 或 return 跳出整个循环)。
forEach 的基本用法
语法很简单:arr.forEach(callback),其中 callback 是一个函数,接收最多三个参数:
-
当前元素(必填):比如
item -
当前索引(可选):比如
index -
原数组(可选):比如
arr
例如:
const colors = ['red', 'green', 'blue'];colors.forEach((item, index) => {
console.log(`${index}: ${item}`);
});
// 输出:
// 0: red
// 1: green
// 2: blue
forEach 和 for 循环的区别
forEach 是高阶函数,更语义化、代码更简洁,适合“只读不改结构”的场景;而传统 for 循环更灵活:
立即学习“Java免费学习笔记(深入)”;
-
forEach无法用break/continue中断,想提前退出只能抛错或用其他方法(如some/every) -
forEach不会改变原数组,也不能直接返回新数组(要生成新数组请用map) -
for循环可以控制步长、反向遍历、随时跳出,也更容易调试
常见误区和注意事项
初学者容易踩几个坑:
-
不要指望 forEach 返回值:它始终返回
undefined,写成const newArr = arr.forEach(...)会得到undefined -
异步操作要小心:在
forEach回调里写async函数,不会按顺序等待,因为forEach本身不处理 Promise。需要并发执行用Promise.all,要串行就别用forEach,改用for...of或普通for -
空位会被跳过:稀疏数组中未定义的索引(如
[1, , 3])不会触发回调
什么时候该用 forEach,什么时候不该用
推荐用 forEach 的情况:
- 只需对每个元素做副作用操作,比如打印、发请求、更新 DOM、存入另一个数据结构
- 逻辑清晰、不需要中途跳出、不依赖返回值
建议换别的方法的情况:
- 需要生成新数组 → 用
map - 需要筛选数据 → 用
filter - 需要累加计算(如求和)→ 用
reduce - 需要查找某个元素 → 用
find或findIndex - 需要中断循环 → 用
for、for...of或some/every










