forEach是数组内置方法,用于遍历每个元素并执行回调函数,返回undefined;参数依次为当前元素、索引和原数组;不可中断循环,不生成新数组,适用于副作用操作而非替代map/filter。

JavaScript 中 forEach 是数组的内置方法,用于**对数组每个元素执行一次回调函数**,不返回新数组(返回 undefined),适合“只遍历、不生成新数据”的场景。
基本语法和参数
forEach 接收一个回调函数作为必需参数,该函数默认有三个形参:
-
当前元素(
item):正在处理的数组项 -
索引(
index):该项在数组中的位置(从 0 开始) -
原数组(
array):调用forEach的那个数组对象
示例:
const colors = ['red', 'green', 'blue'];
colors.forEach((item, index, array) => {
console.log(`${index}: ${item} — 来自数组`, array);
});
// 输出:
// 0: red — 来自数组 [ 'red', 'green', 'blue' ]
// 1: green — 来自数组 [ 'red', 'green', 'blue' ]
// 2: blue — 来自数组 [ 'red', 'green', 'blue' ]常见使用方式
多数时候只需用到前两个参数,可省略第三个;箭头函数写法更简洁:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 只用元素值:
arr.forEach(item => console.log(item)) - 需要索引时:
arr.forEach((item, i) => console.log(i, item)) - 想修改原数组某项?可以,但需通过索引操作:
arr.forEach((item, i) => arr[i] = item.toUpperCase())
⚠️ 注意:forEach 无法用 break 或 return 中断循环(return 只退出当前回调,不影响后续迭代)。
不能替代 map/filter 的情况
forEach 不创建新数组,因此不能直接替代 map 或 filter:
- 要生成新数组 → 用
map:const doubled = nums.map(n => n * 2) - 要筛选元素 → 用
filter:const evens = nums.filter(n => n % 2 === 0) - 只是打印、发送请求、更新 DOM、累加变量等副作用操作 →
forEach很合适
兼容性与替代方案
forEach 在所有现代浏览器和 Node.js 中都支持(IE9+)。若需兼容极老环境(如 IE8),可用传统 for 循环:
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}或用 for...of(ES2015+,支持类数组但不直接提供索引):
for (const item of arr) {
console.log(item);
}

















