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

特性:

1.元素必须是对象。

添加一个number类型的元素。

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

结果是报类型错误。

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 = null
console.log(ws.has(a));

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

false

3.不能遍历

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

End

最新文章

  1. Java学习_int和Integer的区别+包装类
  2. android studio 2.0 GPU Debugger使用说明
  3. 通过声明Attribute属性改变不同类的输出效果
  4. [转]uboot中SPL作用
  5. android开发学习之Layer List
  6. 在Fedora8上的Tomcat上deploy一个war
  7. .Net程序员玩转Android系列之三~快速上手(转)
  8. WF 快速入门
  9. 配置SecureCRT连接Linux CentOS
  10. 【转载】jQuery全屏滚动插件fullPage.js
  11. BZOJ 1299: [LLH邀请赛]巧克力棒 [组合游戏]
  12. maven的安装与配置使用
  13. Modeling Filters and Whitening Filters
  14. IDEA中文出现乱码解决(转)
  15. C# MD5 加密
  16. STO(Security Token Offering)证券型通证、代币发行介绍
  17. 论文笔记:Person Re-identification with Deep Similarity-Guided Graph Neural Network
  18. 阅读<<HDMI 1.4/2.0 Transmitter Subsystem V2.0>>笔记
  19. Dalvik VM (DVM) 与Java VM (JVM) 的区别?
  20. preprocessor设置调试宏

热门文章

  1. 51单片机——My-Clock项目
  2. Delphi2010怎样获取程序内部自身版本?
  3. 远程阿里云window服务器报错身份验证错误
  4. (原)CosFace/AM-Softmax及其mxnet代码
  5. 测试cnblogs的代码折叠展开功能和zoom.js实现图片放大缩小冲突的问题
  6. java hashcode的Delphi实现
  7. java string截取两个字符串之间的值
  8. Java使用Itext5.5.10进行pdf签章
  9. 【java】详解JFrame结构的分层
  10. U盘启动装完系统后 一拔下优盘 就不能进入系统