跳到主要内容

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 等方式。

最小例子:用对象当 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 更适合做缓存/映射。