1.创建WeakSet
const ws = new WeakSet();
const val1 = {id:1},val2 = {id:2},val3 = {id:3};
const ws1 = new WeakSet([val1,val2,val3]);
const ws1 = new WeakSet([val1,"badValue",val3]);
- 通过WeakSet构造函数来创建WeakSet。
- 在构造函数中可以传入数组。
- 参数数组中的值必须为引用值,如果有一个值为无效的原始值,那么就会导致整个初始化失败。
2.通过add方法添加新值
const val1 = {id:1},val2 = {id:2},val3 = {id:3};
const ws1 = new WeakSet();
ws1.add(val1).add(val2);
3.通过has方法来判断是否具有这个值
const val1 = {id:1},val2 = {id:2},val3 = {id:3};
const ws1 = new WeakSet([val1,val2]);
console.log(ws1.has(val1));
console.log(ws1.has(val3));
4.通过delete来删除其中的值
const val1 = {id:1},val2 = {id:2},val3 = {id:3};
const ws1 = new WeakSet([val1,val2,val3]);
console.log(ws1.delete(val1));
console.log(ws1);
5.弱值
- WeakSet中的值是弱弱的拿着的,这些值不属于正式的引用,不会阻止垃圾回收。
const ws = new WeakSet();
ws.add({});
- add方法初始了一个对象,并将它用作一个值,因为没有指向这个对象的其他引用,所以当这行代码执行完成后,这个对象值就会被当做垃圾回收。然后这个值就从弱集合中消失了,使其成为一个新集合。
const ws = new WeakSet();
const container = {
val:{}
};
ws.add(container.val);
function removeReference(){
container.val = null;
}
- container对象维护着一个对若集合值得引用,因此这个对象值不会成为垃圾回收的目标。如果调用了removereference,就会摧毁值对象的最后一个引用,垃圾回收程序就可以把这个值清理掉。
6.不能够迭代
- 又因为WeakSet中的值任何时候都可能被销毁,所以没必要提供迭代其值的能力。
- 也没有clear这样一次性销毁所有值的方法。