forEach是JavaScript数组的遍历方法,执行回调函数但不返回新数组、不改变原数组;回调接收item、index、array三个参数;无法中断循环,适合副作用操作,不支持类数组对象直接调用。

JavaScript 中 forEach 是数组的内置方法,用于遍历数组中的每个元素,执行你提供的回调函数。它不返回新数组,也不改变原数组(仅用于“执行操作”,不能链式调用或中途跳出)。
基本语法和参数
forEach 接收一个回调函数作为必需参数,该函数会为数组中每个元素自动调用一次。回调函数默认接收三个参数:
-
当前元素(item):正在处理的数组项,比如
arr[0] - 索引(index):该项在数组中的位置(从 0 开始)
-
原数组(array):调用
forEach的那个数组对象(通常很少用到)
示例:
const colors = ['red', 'green', 'blue'];colors.forEach((color, index) => {
console.log(`${index}: ${color}`);
});
// 输出:
// 0: red
// 1: green
// 2: blue
常见使用场景
适合做“副作用操作”,比如打印、修改 DOM、发送请求、推入其他数组等:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 批量更新页面元素:
items.forEach(item => document.getElementById(item.id).textContent = item.name); - 收集信息到新结构:
const names = []; data.forEach(d => names.push(d.name));(注意:这里不如map直观) - 触发异步操作(但要注意:
forEach不等待 Promise,如需顺序执行请改用for...of或reduce)
不能中断或跳过
forEach 没有 break 或 continue,也无法通过 return 提前退出整个循环(只能结束当前轮次)。如果需要条件跳出,应改用 for 循环或 some/every:
- ❌ 错误写法:
arr.forEach(x => { if (x === target) return; doSomething(x); });(仍会继续遍历) - ✅ 替代方案:
for (const x of arr) { if (x === target) break; doSomething(x); }
兼容性和注意事项
forEach 在所有现代浏览器和 Node.js 中都支持(IE9+)。注意以下几点:
- 空数组调用
forEach不会执行回调 - 数组长度动态变化时,
forEach按初始长度遍历,新增元素不会被访问 - 不适用于类数组对象(如
arguments或NodeList),需先转成数组:Array.from(nodeList).forEach(...)或用扩展运算符[...nodeList].forEach(...)

















