JS WeakMap 与 WeakSet
WeakMap 和 WeakSet 是 JavaScript 中专门为弱引用对象设计的集合类型。它们与 Map 和 Set 类似,但主要用于 节省内存、避免内存泄漏。
WeakMap
特点
- 只能将 对象 作为键(键必须是对象,不能是原始值)
- 键是弱引用:当对象不再被引用时,会自动被垃圾回收
- 不可遍历(没有
forEach、size等)
基本用法
js
const wm = new WeakMap();
const obj = { name: "Alice" };
wm.set(obj, "some data");
console.log(wm.get(obj)); // "some data"
console.log(wm.has(obj)); // true
// 删除
wm.delete(obj);
使用场景
- 私有数据存储:给对象绑定额外信息而不影响垃圾回收。
js
const privateData = new WeakMap();
class User {
constructor(name) {
privateData.set(this, { id: Math.random() });
this.name = name;
}
getId() {
return privateData.get(this).id;
}
}
const u1 = new User("Alice");
console.log(u1.getId());
WeakSet
特点
- 元素必须是对象
- 弱引用,不影响垃圾回收
- 不可遍历(没有
forEach、size)