JavaScript 词条目录
前端Wiki/词条/Map 与 Set

Map 与 Set

定义ES6 引入的集合类型:Map 是键值对(键可任意类型),Set 是去重值集合

普通对象只能用字符串/Symbol 作键,toString 一番能把接口撞车(1 和 '1' 同键)。Map 允许任意类型作键,还能保持插入顺序、O(1) 查找,size 属性直接取长度。Set 则天生去重——数组去重一行 [...new Set(arr)],比 filter/indexOf 快且清晰。

它们实现了迭代器接口,可直接 for...of,用展开或 Array.from 转回数组。注意:Map/Set 判断键相等用「同值零」(NaN 等于 NaN、+0/-0 相等),Object.is 更严格但日常几乎无差异。

JavaScript
// Set 去重
const uniq = [...new Set([1, 2, 2, 3, 3])];   // [1,2,3]

// Map 用对象作键(对象普通对象做不到)
const m = new Map();
const user = { id: 1 };
m.set(user, { score: 90 });
m.get(user).score = 95;
console.log(m.size);                    // 1
for (const [key, val] of m) console.log(key, val);

// WeakMap:键被回收后对应条目自动消失,适合做私有数据/缓存
const wmap = new WeakMap();
// wmap 不可枚举、不可 size——故意设计,避免泄漏实现细节
⚠ 常见误区
🔗 相关词条对象基础数组遍历垃圾回收相关
← 返回来源章节对象基础