js实现weakmap
WeakMap 的基本概念
WeakMap 是 JavaScript 中的一种集合类型,键必须是对象,值可以是任意类型。与 Map 不同,WeakMap 的键是弱引用,不会阻止垃圾回收机制回收键对象。
创建 WeakMap
使用 new WeakMap() 构造函数创建 WeakMap 实例:
const weakMap = new WeakMap();
添加键值对
使用 set 方法添加键值对,键必须是对象:

const objKey = {};
weakMap.set(objKey, 'value');
获取值
使用 get 方法根据键获取值:
const value = weakMap.get(objKey);
console.log(value); // 输出 'value'
检查键是否存在
使用 has 方法检查 WeakMap 中是否存在某个键:

const hasKey = weakMap.has(objKey);
console.log(hasKey); // 输出 true
删除键值对
使用 delete 方法删除指定的键值对:
weakMap.delete(objKey);
WeakMap 的特点
WeakMap 的键是弱引用,当键对象没有被其他引用时,会被垃圾回收,对应的键值对也会自动从 WeakMap 中移除。WeakMap 不可迭代,没有 size 属性,也不支持 clear 方法。
使用场景
WeakMap 适合用于存储与对象关联的私有数据或元数据,且不希望影响对象的垃圾回收。例如:
const privateData = new WeakMap();
class MyClass {
constructor() {
privateData.set(this, { secret: 42 });
}
getSecret() {
return privateData.get(this).secret;
}
}
const instance = new MyClass();
console.log(instance.getSecret()); // 输出 42
注意事项
WeakMap 的键必须是对象,尝试使用非对象键会抛出错误。WeakMap 不支持直接遍历或获取所有键值对。






