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在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
浅谈Javascript面向对象编程
Nov 15 Javascript
js调用css属性写法
Sep 21 Javascript
jquery html动态生成select标签出问题的解决方法
Nov 20 Javascript
JavaScript中的Truthy和Falsy介绍
Jan 01 Javascript
jQuery toggle 代替方法
Mar 22 Javascript
Bootstrap警告框(Alert)插件使用方法
Mar 21 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
Dec 08 Javascript
javascript使用链接跨域下载图片
Nov 01 Javascript
在Vue中获取自定义属性方法:data-id的实例
Sep 09 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
JS数组索引检测中的数据类型问题详解
Jan 11 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通用检测函数集合
2006/11/25 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
PHP 快速排序算法详解
2014/11/10 PHP
js验证表单第二部分
2006/11/25 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
Python实现去除代码前行号的方法
2015/03/10 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
Python实现FLV视频拼接功能
2020/01/21 Python
Python计算IV值的示例讲解
2020/02/28 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
Python ellipsis 的用法详解
2020/11/20 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
高级编程求职信模板
2014/02/16 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
教职工代表大会主持词
2014/04/01 职场文书
高中校园广播稿
2014/10/21 职场文书
音乐教师求职信范文
2015/03/20 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
致运动员赞词
2015/07/22 职场文书