当前位置: 首页 > news >正文

JavaScript 中的 forEach() 方法

一、forEach() 是什么?

 
forEach() 是 JavaScript 数组的内置方法,用于遍历数组的每一个元素,并对每个元素执行你指定的回调函数。它的核心特点是:
 
  • 遍历过程中无法被中断(不能用 break/continue,只能通过抛出异常终止);
  • 没有返回值(默认返回 undefined),不会改变原数组(除非你在回调里主动修改);
  • 回调函数会接收 3 个参数(后两个可选):当前元素、当前索引、原数组。
 

二、基本语法

数组.forEach(function(currentValue, index, array) {// 对当前元素的操作逻辑
}, thisArg); // thisArg 可选,指定回调函数中 this 的指向
参数说明:
 
  • currentValue:当前正在遍历的数组元素(必选);
  • index:当前元素的索引(可选);
  • array:调用 forEach() 的原数组(可选);
  • thisArg:可选,回调函数中 this 要指向的对象(如果省略,非严格模式下 this 指向全局对象,严格模式下为 undefined)。
 

三、基础使用示例

 

1. 遍历数组并打印每个元素

const fruits = ['苹果', '香蕉', '橙子'];// 基础用法:只使用当前元素
fruits.forEach(function(fruit) {console.log(fruit);
});
// 输出:
// 苹果
// 香蕉
// 橙子

2. 结合索引使用

const nums = [10, 20, 30];nums.forEach((num, index) => {console.log(`索引 ${index} 的值是:${num}`);
});
// 输出:
// 索引 0 的值是:10
// 索引 1 的值是:20
// 索引 2 的值是:30

3. 计算数组元素总和

const scores = [85, 90, 78, 95];
let total = 0;scores.forEach(score => {total += score; // 累加每个元素到total
});console.log('总分:', total); // 输出:总分:348

四、注意事项

 
  1. 无法中断遍历forEach() 不支持 break/continue,如果想提前终止遍历,只能抛出异常(不推荐),此时可以考虑用 for 循环或 some()/every()
try {[1,2,3,4].forEach(num => {if (num === 3) throw new Error('终止遍历');console.log(num);});
} catch (e) {if (e.message !== '终止遍历') throw e; // 只捕获自定义的终止异常
}
// 输出:1 2

2、遍历空元素forEach() 会跳过数组的空元素(但不会跳过 undefined/null);

const arr = [1, , 3]; // 第二个元素是空
arr.forEach(item => console.log(item)); // 输出:1 3

3、异步操作问题forEach() 不支持异步回调的 “等待”,如果回调里有 async/await,遍历不会按顺序等待异步操作完成;

// 错误示例:不会等待每个延时完成
[1,2,3].forEach(async num => {await new Promise(resolve => setTimeout(resolve, 1000));console.log(num);
});
// 正确做法:用 for...of 循环
async function test() {for (const num of [1,2,3]) {await new Promise(resolve => setTimeout(resolve, 1000));console.log(num);}
}
test(); // 每隔1秒输出 1、2、3

总结

 
  1. forEach() 是数组遍历的基础方法,核心作用是对每个元素执行回调,无返回值;
  2. 关键限制:无法中断遍历、不支持异步等待,需根据场景选择替代方案(for 循环、some()/every()for...of);
  3. 回调函数的核心参数是 “当前元素”,索引和原数组为可选,可灵活满足不同遍历需求。

 

http://www.jsqmd.com/news/307897/

相关文章:

  • AI学习01--WSL 显卡直通
  • 导师严选2026 AI论文平台TOP9:专科生毕业论文写作全攻略
  • 还原论泛化,就是伪共识
  • 2026年度河北化学品防爆冰箱费用分析,口碑好的生产商盘点
  • 分析广告用铝塑板材怎么选,哪家性价比高的厂家靠谱?
  • 说说深圳消防工程施工公司哪个好,推荐几家靠谱又性价比高的
  • 【数据结构】败者树、B树、排序、查找、并查集 - 详解
  • libero PolarFire soc SPI-DirectC 操作流程
  • git远程仓库
  • 宜昌寒假作业印刷厂家怎么选择,口碑好的有几家?
  • 说说山东用户如何选购靠谱的高温隧道炉,江苏盐能正规厂商咋样?
  • 高频动效引发内存暴涨?
  • CF透明亚克力有哪些颜色,钦洪广告产品耐用美观
  • 高频粒子特效导致内存暴涨?5大原因解析
  • 聊聊广州、惠州高压电力设备维保,哪家口碑好一目了然
  • 回调函数地狱、Promise-链式调用、
  • 1.27
  • 2026绵阳牙齿种植优质机构推荐:绵阳牙冠、绵阳牙齿根管治疗、绵阳牙齿矫正、绵阳牙齿美白、绵阳种植牙医院、绵阳补牙选择指南
  • HTTP Error 500.30 - ASP.NET Core app failed to start
  • git记住账号密码
  • ClawdBot 详细安装使用指南
  • docker 容器参数LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen
  • 亲测好用10个一键生成论文工具,自考毕业论文轻松搞定!
  • 2026年校园服务机器人选购指南:支持OEM定制的接待与导览解决方案推荐
  • WebP 转 JPG:为什么很多人最后还是选择 JPG 格式?
  • 详细介绍:ai(二)ubuntu22.04配置环境
  • 2026绵阳牙齿种植优质机构推荐指南
  • SPDIFRX接口:数字音频接收全解析
  • 巨宇科技geo优化口碑排名大揭秘,这家公司靠谱吗
  • 2026年氟塑料换热器厂家排名,靠谱的品牌推荐