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 相关文章推荐
使用隐藏的new来创建对象
Mar 29 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
Jul 15 Javascript
JQuery对表格进行操作的常用技巧总结
Apr 23 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
Aug 01 Javascript
jQuery插件ContextMenu自定义图标
Mar 15 Javascript
基于vue的换肤功能的示例代码
Oct 10 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
在vue中通过axios异步使用echarts的方法
Jan 13 Javascript
layui实现文件或图片上传记录
Aug 28 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
js实现二级联动简单实例
Jan 11 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 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
BBS(php & mysql)完整版(一)
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
Node.js文件操作详解
2014/08/16 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
python获取糗百图片代码实例
2013/12/18 Python
python web框架学习笔记
2016/05/03 Python
Python实现针对中文排序的方法
2017/05/09 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
python中使用while循环的实例
2019/08/05 Python
python3.5的包存放的具体路径
2020/08/16 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
如何进行Linux分区优化
2016/09/13 面试题
会计大学生职业生涯规划书范文
2014/01/13 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
师德师风主题教育活动总结
2015/05/07 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电