javascript高级程序设计阅读收获(6.7)——WeakSet

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]);
  1. 通过WeakSet构造函数来创建WeakSet。
  2. 在构造函数中可以传入数组。
  3. 参数数组中的值必须为引用值,如果有一个值为无效的原始值,那么就会导致整个初始化失败。

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));//true
console.log(ws1.has(val3));//false

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);//只剩下val2和val3

5.弱值

  1. WeakSet中的值是弱弱的拿着的,这些值不属于正式的引用,不会阻止垃圾回收。
const ws = new WeakSet();
ws.add({});
  1. add方法初始了一个对象,并将它用作一个值,因为没有指向这个对象的其他引用,所以当这行代码执行完成后,这个对象值就会被当做垃圾回收。然后这个值就从弱集合中消失了,使其成为一个新集合。
const ws = new WeakSet();
const container = {
	val:{}
};
ws.add(container.val);
function removeReference(){
	container.val = null;
}
  1. container对象维护着一个对若集合值得引用,因此这个对象值不会成为垃圾回收的目标。如果调用了removereference,就会摧毁值对象的最后一个引用,垃圾回收程序就可以把这个值清理掉。

6.不能够迭代

  1. 又因为WeakSet中的值任何时候都可能被销毁,所以没必要提供迭代其值的能力。
  2. 也没有clear这样一次性销毁所有值的方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子 旭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值