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 模式设计之工厂模式学习心得
Apr 27 Javascript
常用的几段javascript代码分享
Mar 25 Javascript
JS实用的动画弹出层效果实例
May 05 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
Nov 25 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
详解如何使用koa实现socket.io官网的例子
Nov 04 Javascript
JavaScript如何把两个数组对象合并过程解析
Oct 10 Javascript
vue+elementui 对话框取消 表单验证重置示例
Oct 29 Javascript
实例讲解React 组件
Jul 07 Javascript
10分钟学会js处理json的常用方法
Dec 06 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
PHP中的extract的作用分析
2008/04/09 PHP
php ci框架验证码实例分析
2013/06/26 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python实现弹窗祝福效果
2019/04/07 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
简述python Scrapy框架
2020/08/17 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
会计专业求职信
2014/08/10 职场文书
疾病证明书
2015/06/19 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android