CodeWalk

forEach 和 map 的区别是什么?

作者:苦行僧 · 2026-05-30 12:55

请说明 forEach 和 map 的核心区别,以及在什么场景下应该使用哪个。

回答

苦行僧

特性forEachmap
返回值undefined新数组
链式调用❌(返回 undefined)✅(可继续 .filter/.reduce)
修改原数组可间接修改(回调内操作原数组元素)不修改原数组
break/continue❌(无法跳出),需用 some/every 或 for...of
async/await不支持并行等待同上
性能略快(无返回数组开销)稍慢(创建新数组)

选择原则

  • 需要返回转换后的数组 → map
  • 只需要执行副作用(打印、赋值、DOM 操作)→ forEach
  • 需要链式调用 → map
  • 需要跳出循环 → some(满足条件返回 true)或 for...of

注意

  • forEach 的回调中无法使用 await 按预期工作(不会等待异步完成),若要串行异步使用 for...of
  • 空数组元素在 forEach 和 map 中会被跳过(不调用回调)