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