-
WeakMap 是 JavaScript 中的一种内置对象,它提供了一种键-值对的存储方式。
-
与普通的 Map 对象不同,WeakMap 的键只能是对象,并且对于不再被引用的键,其对应的值会被自动回收,不会造成内存泄漏
-
特性:
- 只接受对象作为键
- 弱引用
- 不可迭代
- 没有公开的方法和属性,只有 set()、get() 和 delete(),has() 方法来操作键值对
let obj = {};
//创建一个FinalizationRegistry 对象,监听对象是否被销毁
const registry = new FinalizationRegistry(function (val) {
debugger;
console.log('FinalizationRegistry', val);
if (val === "obj") {
console.log("obj对象被销毁");
}
});
registry.register(obj, 'obj');
let wp = new WeakMap();
wp.set(obj, 'foo el');
console.log(111, wp.get(obj)); // foo el
setTimeout(() => {
console.log(222, wp.get(obj)); // undefined
}, 10000);
obj = null;
输出结果
111 'foo el'
null
FinalizationRegistry info
info对象被销毁
222 undefined