Map 是什么,有什么作用?
面试速答(30 秒版 TL;DR)
Map是“键值对集合”,键可以是任意类型(对象、函数、NaN 都行)。- 适合做:需要“非字符串 key”的字典、缓存、按插入顺序迭代的映射。
- 常用 API:
set/get/has/delete/clear,数量用size。
Map vs Object(面试对比点)
- key 类型:
- Object:key 会被转成字符串(或 Symbol),不适合用对象当 key。
- Map:key 不会被强转,按“同一 key 引用/值”区分。
- 迭代与大小:
- Map:原生可迭代,
size直接拿。 - Object:需要
Object.keys(obj).length等方式。
- Map:原生可迭代,
最小例子:用对象当 key(Map 的典型价值)
const cache = new Map();
const user1 = {id: 1};
const user2 = {id: 1};
cache.set(user1, 'A');
cache.set(user2, 'B');
console.log(cache.get(user1)); // "A"
console.log(cache.get(user2)); // "B"
console.log(cache.size); // 2
如果用 Object 来做 key,通常会因为 key 被字符串化而丢失区分度。
典型追问:WeakMap 是什么?
- WeakMap 的 key 只能是对象,并且是弱引用,不阻止 GC。
- 适合做“对象附加元数据/私有缓存”,避免内存泄漏。
易错点/坑
- Map 的 key 比较是“同一个引用/同一个值”,不是深比较。
- 不要把 Map 当 JSON 直接 stringify:需要自己转数组或对象。
速记要点(可背诵)
- Map:真正的字典结构,key 可为任意类型;比 Object 更适合做缓存/映射。