ES6新增数据结构WeakSet的用法详解


Posted in Javascript onAugust 07, 2017

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

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

false

3.不能遍历

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

总结

以上所述是小编给大家介绍的ES6新增数据结构WeakSet的用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
百度留言本js 大家可以参考下
Oct 13 Javascript
javascript Array数组对象的扩展函数代码
May 22 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
Mar 25 Javascript
jquery删除table当前行的实例代码
Oct 07 Javascript
使用D3.js制作图表详解
Aug 13 Javascript
浅谈webpack打包之后的文件过大的解决方法
Mar 07 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
详解javascript replace高级用法
Feb 17 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
bootstrap Table插件使用demo
Aug 07 #Javascript
Django+Vue.js搭建前后端分离项目的示例
Aug 07 #Javascript
React进阶学习之组件的解耦之道
Aug 07 #Javascript
详解前端路由实现与react-router使用姿势
Aug 07 #Javascript
React中使用collections时key的重要性详解
Aug 07 #Javascript
react路由配置方式详解
Aug 07 #Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 #Javascript
You might like
西德产收音机
2021/03/01 无线电
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
PHP生成树的方法
2015/07/28 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
JavaScript实现带标题的图片轮播特效
2015/05/20 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python中Random和Math模块学习笔记
2015/05/18 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
Python Pillow Image Invert
2019/01/22 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
python链表类中获取元素实例方法
2021/02/23 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
学生档案自我鉴定
2013/10/07 职场文书
电气自动化大学生求职信
2013/10/16 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
尊师重教演讲稿
2014/09/04 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
简爱读书笔记
2015/06/26 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
spring boot实现文件上传
2022/08/14 Java/Android