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代码
Sep 02 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
Apr 26 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
关于Javascript 对象(object)的prototype
May 09 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
讲解vue-router之什么是嵌套路由
May 28 Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 jQuery
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
Sep 05 Javascript
js实现文字头像的生成代码
Mar 07 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
Laravel 5 学习笔记
2015/03/06 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python文件和目录操作详解
2015/02/08 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python自动zip压缩目录的方法
2015/06/28 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
使用npy转image图像并保存的实例
2020/07/01 Python
Python使用Pygame绘制时钟
2020/11/29 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
单位创先争优活动方案
2014/01/26 职场文书
教师开学感言
2014/02/14 职场文书
护士自我鉴定总结
2014/03/24 职场文书
李强为自己工作观后感
2015/06/11 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
2016婚礼主持词开场白
2015/11/24 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android