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 相关文章推荐
xml 与javascript结合的问题解决方法
Mar 24 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
Nov 07 Javascript
JS判断移动端访问设备并加载对应CSS样式
Jun 13 Javascript
javascript中cookie对象用法实例分析
Jan 30 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
jquery实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
Bootstrap编写导航栏和登陆框
May 30 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
JavaScript 处理树数据结构的方法示例
Jun 16 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
Aug 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
PHP自定义错误用法示例
2016/09/28 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JavaScript基础知识之数据类型
2012/08/06 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
jquery判断input值不为空的方法
2016/06/05 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
领导视察欢迎词
2014/01/15 职场文书
八项规定整改措施
2014/02/12 职场文书
生物学专业求职信
2014/07/23 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang