博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6,新增数据结构WeakSet的用法
阅读量:5998 次
发布时间:2019-06-20

本文共 758 字,大约阅读时间需要 2 分钟。

WeakSet和Set类似,同样是元素不重复的集合,它们的区别是WeakSet内的元素必须是对象,不能是其它类型。

特性:

1.元素必须是对象。

添加一个number类型的元素。

const ws = new WeakSet()ws.add(1)

结果是报类型错误。

TypeError: Invalid value used in weak set

 

添加一个对象。

const ws = new WeakSet()var a = {p1:'1', p2:'2'}ws.add(a)console.log(ws.has(a));

添加OK,结果显示:

true

可以通过WeakSet的has方法判断一个元素是否已在集合中。

如果不需要存储元素时,可以使用delete方法删除元素。

 

2.弱引用,不被计入垃圾回收

添加进WeakSet的元素对象,WeakSet不会对元素对像的引用计数加1,对于被添加进WeakSet的元素对象,只要该元素对象没有被除WeakSet以外的其他对象引用,就会被垃圾回收释放,在WeakSet中的该元素对象自动被释放,不会出现内存泄漏。

因为这一特性,其性能要比map要高,对于存储无顺序要求的,不重复的,临时存储的场景,可以使用它。

const ws = new WeakSet()var a = {p1:'1', p2:'2'}ws.add(a)a = nullconsole.log(ws.has(a));

先将对象添加到WeakSet中,然后将对象设成null,然后再下面的has方法判定时,结果显示,表示WeakSet中已经不存在该对象。

false

 

3.不能遍历

因为其对内部的元素对象是弱引用,随时会被垃圾回收释放掉,所以其不支持size和forEach等遍历方法。

 

End

转载地址:http://ikzmx.baihongyu.com/

你可能感兴趣的文章
23种面向对象的设计模式整理汇总
查看>>
String,StringBuffer,StringBuilder三者的区别
查看>>
2017.11.6对比Gerber差异+确认元器件方向,封装
查看>>
L93
查看>>
Google Code Jam 2016 Round 1C C
查看>>
考试题目
查看>>
webView根据显示内容动态设置frame
查看>>
Spring 使用注解方式进行事务管理
查看>>
[置顶] 封闭环境下的人性博弈——长文纪念诺兰的蝙蝠侠三部曲
查看>>
解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题
查看>>
java泛型数组
查看>>
java中Integer常量池
查看>>
MFC对话框弹出上下文菜单并响应命令
查看>>
MacBook + 移动SSD实现三系统(Mac OS、windows、ubuntu)
查看>>
Appium对京东App中WebView的处理
查看>>
笑对人生,坐看云起云落
查看>>
面向对象
查看>>
连接池并发的实现原理
查看>>
HDU - 3966-Aragorn' Story(树链剖分+线段树)
查看>>
【BZOJ1101】Zap [莫比乌斯反演]
查看>>