📜  JavaScript WeakSet(1)

📅  最后修改于: 2023-12-03 14:42:27.918000             🧑  作者: Mango

JavaScript WeakSet

JavaScript WeakSet是ES6引入的一种新的基本数据类型,是JavaScript的一种集合类型,它只能保存弱对象的引用,不允许存储基本类型的值。与Set相似,但WeakSet中的元素只能是对象,并且是被弱引用的,也就是说,如果一个对象在外部调用后被垃圾回收了,那么在WeakSet中的这个对象也会自动被删除。WeakSet不支持迭代器。

特点
  • WeakSet中的元素只能是对象,不支持存储基本数据类型的值;
  • WeakSet对元素的引用是弱引用,即如果元素对象在外部代码中被垃圾回收了,那么在WeakSet中的引用也会被自动清除;
  • WeakSet不支持迭代器。
使用方法
创建WeakSet

可以通过以下两种方式创建WeakSet

  • 通过new关键字创建。
  • 通过可迭代对象创建,如数组或字符串。
//通过new关键字创建
const weakSet = new WeakSet();

//通过可迭代对象创建
const weakSet = new WeakSet([obj1, obj2, obj3]);
添加元素
const weakSet = new WeakSet();
const obj = {};
weakSet.add(obj);
删除元素
const weakSet = new WeakSet();
const obj = {};
weakSet.add(obj);
console.log(weakSet.has(obj)); //true
weakSet.delete(obj);
console.log(weakSet.has(obj)); //false
判断元素是否存在
const weakSet = new WeakSet();
const obj = {};
weakSet.add(obj);
console.log(weakSet.has(obj)); //true
使用场景

由于WeakSet中的元素只能是对象,并且对元素的引用是弱引用,所以它在以下几个方面有着广泛的应用:

  • 缓存管理。通过WeakSet保存缓存对象,当缓存对象在外部被垃圾回收时,也会自动从WeakSet中删除,避免内存泄漏。
  • 监听器管理。可以通过WeakSet保存监听器,当监听器所对应的对象被垃圾回收时,也会自动从WeakSet中删除,避免内存泄漏。
  • 数据集合的隐藏。可以用WeakSet来隐藏数据集合,因为它不能被迭代器访问,这样可以保障数据集合中数据的隐私性。
总结

WeakSet是ES6引入的一种新的基本数据类型,它只能保存弱对象的引用,不允许存储基本类型的值。它对元素的引用是弱引用,所以它被广泛应用于缓存管理、监听器管理和数据集合的隐藏等方面。