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 相关文章推荐
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
Feb 18 Javascript
setTimeout与setInterval在不同浏览器下的差异
Jan 24 Javascript
解析页面加载与js函数的执行 onload or ready
Dec 12 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
jquery——九宫格大转盘抽奖实例
Jan 16 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
Mar 25 Javascript
jquery实现购物车基本功能
Oct 25 jQuery
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 Vue.js
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
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
python关键字and和or用法实例
2015/05/28 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
CSS3 边框效果
2019/11/04 HTML / CSS
三个Unix的命令面试题
2015/04/12 面试题
营销与策划专业毕业生求职信
2013/11/01 职场文书
节水倡议书
2015/01/19 职场文书
倡议书范文大全
2015/04/28 职场文书
活动总结模板大全
2015/05/11 职场文书
用电申请报告范文
2015/05/18 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Go 语言中 20 个占位符的整理
2021/10/16 Golang
Nginx利用Logrotate实现日志分割
2022/05/20 Servers