前端/移动开发面试题更新 2026-08-05

在 JavaScript 中,数组的 forEach 方法和 map 方法在功能与返回值上存在哪些差异?

前端/移动开发技术原理JavaScript

考察说明

考查对 JavaScript 数组高阶方法 forEach 与 map 的语义、返回值及典型使用场景的理解。

回答思路

  1. 【回答框架 1】forEach 用于对数组每个元素执行副作用操作,仅遍历并调用回调函数,不返回新数组,其返回值为 undefined。
  2. 【回答框架 2】map 通过回调函数对每个元素进行映射转换,返回一个由每次调用结果组成的新数组,原数组保持不被修改。
  3. 【回答框架 3】forEach 适合执行打印、修改外部变量、发送请求等副作用场景;map 适合将原数组元素转换成新数据结构的纯函数式场景。
  4. 【回答框架 4】二者都不会自动中断,如需提前退出应改用 for 循环、for...of 配合 break,或使用 every、some 等方法。
  5. 【回答框架 5】map 的每次回调必须返回一个值用于构造新数组,若不返回则新数组对应位置为 undefined;forEach 的回调返回值被忽略。
  6. 【关键点 1】forEach 返回 undefined,map 返回新数组。
  7. 【关键点 2】map 能链式调用,forEach 不能直接链式继续数组操作。
  8. 【关键点 3】二者均不修改原数组(但回调内可修改外部变量或对象属性)。
  9. 【关键点 4】性能差异通常不大,选择依据是是否需要新数组。
  10. 【关键点 5】在空数组中调用二者都不会执行回调,返回空数组或 undefined。
  11. 【易错点 1】误认为 map 可以替代 forEach 进行副作用操作,导致创建无用数组。
  12. 【易错点 2】在回调中使用 async 时,forEach 不等待异步完成,需用 for...of 或 Promise.all 处理。
  13. 【易错点 3】试图用 break 或 return 中断 forEach/map,实际无法中断,需要改用其他循环方式。