WeakMap 弱引用 不会被GC所考量

WeakMap是一种特殊的Map数据结构,只能以引用作为key,并且不会阻止其被垃圾回收。WeakMap的使用如下:

1. 创建WeakMap对象:


   const weakMap = new WeakMap();

2. 添加键值对:使用set()方法向WeakMap中添加键值对。注意这里的key为空对象


   const key = {}; // 引用类型作为key
   const value = 'value';
   weakMap.set(key, value);

3. 获取值:使用get()方法根据key获取对应的值。


   const value = weakMap.get(key);
   console.log(value); // 'value'

4. 判断是否存在key:使用has()方法判断key是否存在。


   const hasKey = weakMap.has(key);
   console.log(hasKey); // true

5. 删除键值对:使用delete()方法删除指定的键值对。


   const deleteResult = weakMap.delete(key);
   console.log(deleteResult); // true

        需要注意的是,由于WeakMap只能使用引用类型作为键,不能迭代和获取大小等操作。并且WeakMap的键是弱引用,一旦没有其他引用指向该key,它将会被垃圾回收掉。这也意味着无法遍历WeakMap中的键值对。

        WeakMap的应用场景包括:存储对象私有属性、缓存等。

Map和WeakMap对比

WeakMap 弱引用 不会被GC所考量_第1张图片

        如何体现他是个弱引用呢,看下下面的例题,当weakMap换成 new Map()时,输出变化的就只有size值

let key1 = { id: 1 };
let key2 = { id: 2 };
// 创建一个WeakMap对象
let weakMap = new WeakMap();
// let weakMap = new Map();
// 将键值对添加到WeakMap中
weakMap.set(key1, "Value 1");
weakMap.set(key2, "Value 2");
// 输出WeakMap的键值对数量
console.log(weakMap.has(key1),weakMap.has(key2),weakMap.get(key1),weakMap.get(key2), "Size of WeakMap: " + weakMap.size);  // 输出: Size of WeakMap: undefined
// 模拟删除key1对应的引用
key1 = null;
// 由于没有其他引用指向key1,它将被垃圾回收
// 此时WeakMap中只剩下key2对应的键值对
console.log(weakMap.has(key1),weakMap.has(key2),weakMap.get(key1),weakMap.get(key2),"Size of WeakMap after garbage collection: " + weakMap.size);  // 输出: Size of WeakMap: undefined

你可能感兴趣的:(#,前端基础,1024程序员节)