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 相关文章推荐
Javascript this 的一些学习总结
Aug 02 Javascript
JavaScript 学习笔记之操作符(续)
Jan 14 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
Nov 27 Javascript
JSON+Jquery省市区三级联动
Jan 13 Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 Javascript
AngularJS基础 ng-readonly 指令简单示例
Aug 02 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
vue左侧菜单,树形图递归实现代码
Aug 24 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
深入了解JavaScript 私有化
May 30 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
Python深入学习之装饰器
2014/08/31 Python
python实现机器学习之元线性回归
2018/09/06 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
小学生自我评价范例
2013/09/24 职场文书
小学教师学期末自我评价
2013/09/25 职场文书
清洁工表扬信
2014/01/08 职场文书
军训自我鉴定100字
2014/02/13 职场文书
高中综合实践活动总结
2014/07/07 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers