4.WeakMap和WeakSet

52 阅读1分钟

JavaScript中的WeakMap是什么?

JavaScript中的WeakMap是键/值对的集合,其中键被弱引用。这意味着键被弱保存,如果不存在其他强引用,则可以进行垃圾收集。这与常规Map形成鲜明对比,其中键被强引用,并且只有在删除后才会被垃圾收集。

开发人员通常更喜欢在密钥是临时的并且在不再需要时应该进行垃圾收集的情况下使用WeakMaps。

以下是如何在JavaScript中使用WeakMap的示例:

// create a new WeakMap
const map = new WeakMap();

// 创建一个用作键的对象
const key = {};

// 使用对象作为键向WeakMap添加一个值
map.set(key, "value");

// 使用对象作为键从WeakMap获取值
console.log(map.get(key));  // 打印 "value"

// 从内存中删除对象
key = null;

// 密钥对象现在符合垃圾回收机制

注意:WeakMap没有size属性,您无法迭代它,并且它没有明确的方法。

此外,您不能在WeakMap上使用原始类型作为键。

Javascript中的WeakSet是什么?

与WeakMap类似,JavaScript中的WeakSet是类似Set的对象集合,其中对象被弱引用。

以下是如何在JavaScript中使用WeakSet的示例:

// create a new WeakSet
const set = new WeakSet();

// 创建一个对象以添加到WeakSet
const object1 = {};
const object2 = {};

// 将对象添加到WeakSet
set.add(object1);
set.add(object2);

//检查对象是否在WeakSet中
console.log(set.has(object1));  // 打印 true

// 从内存中删除对象
object1 = null;

// 对象现在符合垃圾回收机制

WeakSet也没有size属性,您无法迭代它,并且它没有明确的方法。