Map、Set、WeakMap 与普通对象各有什么用途?
参考答案
Map 是键值集合,键可以是任意值,并按插入顺序迭代;Set 保存不重复的值。普通对象更适合表达具有固定字段的记录,但其原型、属性键转换和整数键枚举规则不能简单等同于 Map。
WeakMap 的键具有弱引用特性,适合为对象关联额外元数据而不单独阻止其回收。它不能枚举,也不能获取 size,因为垃圾回收时机不可预测。现代规范还允许某些不可注册 Symbol 作为弱键,使用时需确认目标运行环境。
缓存不一定应该使用 WeakMap:若需要主动淘汰、遍历或按字符串查询,Map 加容量策略更合适。WeakMap 解决的是特定引用关系,不保证所有内存泄漏问题自动消失。
可运行示例
JavaScript
const key = {};
const values = new Map([[key, 1]]);
console.log(values.get(key));
console.log(values.get({}));
输出依次为:1、undefined,内容相同的两个对象仍不是同一个键。