JavaScript 中的 Map 是支持任意类型键的键值对集合,通过 set() 存储(支持链式调用、覆盖同键旧值)、get() 获取(需相同引用)、has() 判断存在性,且不继承 Object.prototype,不可点访问或 JSON 序列化。

JavaScript 中的 Map 是一个键值对集合,支持任意类型作为键(包括对象、函数、Symbol 等),比普通对象更灵活。它的 set() 和 get() 方法是核心操作,用于存取数据。
用 set() 存储键值对
set(key, value) 接收两个参数:键和对应的值。它会返回当前 Map 实例,因此支持链式调用。
- 键可以是字符串、数字、布尔值、null、undefined、对象、函数、Symbol 等,不会被强制转为字符串
- 重复调用
set()同一个键,会覆盖旧值,不会报错 - 示例:const map = new Map();
map.set('name', 'Alice');
map.set(42, 'answer');
map.set({id: 1}, 'user object'); // 对象作键没问题
用 get() 获取对应值
get(key) 根据键查找并返回对应的值;如果键不存在,则返回 undefined(不是报错)。
- 必须传入与
set()时完全相同的键引用(尤其对对象、数组等引用类型) - 比如用新创建的对象当键去
get(),即使属性一样,也查不到——因为不是同一个引用 - 示例:console.log(map.get('name')); // 'Alice'
console.log(map.get({id: 1})); // undefined(新对象,非原引用)
const userKey = {id: 1};
map.set(userKey, 'user object');
console.log(map.get(userKey)); // 'user object'
配合 has() 判断键是否存在
get() 返回 undefined 无法区分“键不存在”和“值就是 undefined”,所以建议用 has(key) 先判断:
立即学习“Java免费学习笔记(深入)”;
-
map.has('name')返回true或false - 再结合
get()安全取值,例如:if (map.has('score')) { const s = map.get('score'); }
注意点:与普通对象的区别
不要把 Map 当成增强版对象来用——它不继承 Object.prototype,没有点号访问、不能用 for...in 遍历,也不支持 JSON 序列化。要用 set/get/has/size/keys/values/entries 等自有方法操作。
不复杂但容易忽略


















