WeakMap
和 WeakSet
是 JavaScript 中的两种特殊的集合类型,它们与 Map
和 Set
类似,但有一些区别。
WeakMap
是一种键是弱引用的集合类型,它的键只能是对象,而值可以是任意类型。当一个键不再被引用且没有其他引用指向它时,该键值对会被自动移除,这样有助于避免内存泄漏。
以下是 WeakMap
的简单示例:
let weakMap = new WeakMap();
let key = {};
weakMap.set(key, "value");
console.log(weakMap.get(key)); // 输出 "value"
key = null; // 将 key 置为 null
// 此时 key-value 对会被自动移除
WeakSet
是一种弱引用的集合类型,它只能包含对象,并且每个对象只能出现一次。与 WeakMap
类似,当一个对象不再被引用且没有其他引用指向它时,该对象会被自动移除。
以下是 WeakSet
的简单示例:
let weakSet = new WeakSet();
let obj1 = {};
let obj2 = {};
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // 输出 true
obj1 = null; // 将 obj1 置为 null
// 此时 obj1 会被自动移除
总的来说,WeakMap
和 WeakSet
主要用于需要存储对象集合,并且希望在对象不再被引用时自动清除的场景。