Map.prototype.forEach 可按插入顺序遍历键值对,回调函数参数依次为值、键、Map对象本身,不可中断,适用于纯副作用操作。

可以直接用 Map.prototype.forEach 遍历 Map 中的每个键值对,它接收一个回调函数,该函数会按插入顺序依次执行,参数依次是 值、键、Map 对象本身。
基本用法:传入三参数回调
Map 的 forEach 和数组不同,它的回调函数默认接收三个参数:value(当前值)、key(当前键)、map(原 Map 实例)。顺序不能颠倒,否则容易取错数据。
- 第一个参数是值(不是键),这点和
Array.prototype.forEach的参数顺序一致,但语义上更贴近“值优先”的设计 - 第二个参数才是键,注意不是索引
- 第三个参数是当前 Map 对象,可用于链式操作或条件判断
常见写法示例
假设有一个 Map:
const myMap = new Map([['a', 1], ['b', 2], ['c', 3]]);
遍历时可以这样写:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
myMap.forEach((value, key) => {
console.log(`${key} → ${value}`);
});
// 输出:
// a → 1
// b → 2
// c → 3如果需要在回调里修改原 Map,可利用第三个参数:
myMap.forEach((value, key, map) => {
if (value > 1) map.set(key, value * 10);
});与 for...of 和 entries() 的区别
forEach 是不可中断的遍历方式(没有 break 或 return false 机制),适合纯副作用操作;而 for...of 可以配合 break 或 continue 控制流程:
- 想提前退出?用
for...of+break - 只读遍历、逻辑简单?
forEach更简洁 - 需要解构键值对?
for...of (const [key, value] of myMap)更直观
注意事项
Map 的遍历顺序始终是**插入顺序**,和对象属性顺序无关;forEach 不会跳过被删除的键,但如果在遍历中删除当前正在访问的键,其后续行为未定义(不建议这么做)。
另外,回调中的 this 默认是 undefined(严格模式下),如需绑定上下文,可在第二个参数传入 thisArg:
myMap.forEach(function(value, key) {
console.log(this.prefix + value);
}, { prefix: '>> ' });

















