说明

和Set类似的另外一个数据结构称之为WeakSet,也是内部元素不能重复的数据结构。
那么和Set有什么区别呢?

  • 区别一: WeakSet中只能存放对象类型,不能存放基本数据类型;

    1. let weakSet = new WeakSet();
    2. weakSet.add(10);
    3. // Uncaught TypeError: Invalid value used in weak set
  • 区别二: WeakSet对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,那么GC可以对该对象进行回收

image.png

使用

add(value)

添加某个元素,返回WeakSet对象本身;

delete(value)

从WeakSet中删除和这个值相等的元素,返回boolean类型;

has(value)

判断WeakSet中是否存在某个元素,返回boolean类型;

没有清除

WeakSet不能遍历

因为WeakSet只是对对象的弱引用,如果我们遍历获取到其中的元素,那么有可能造成对象不能正常的销毁。所以存储到WeakSet中的对象是没办法获取的;

使用场景(用得少)

WeakSet 弱集合 - 图2
WeakSet 弱集合 - 图3
这样通过其他方式如call绑定其他this的,由于这个this没在临时储存里面,因此就会报错。

这个因为是临时储存,是弱引用,如果里面的实例对象被回收了,这里也就自动删除了这个元素,不会占内存空间