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 相关文章推荐
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
实用的Jquery选项卡TAB示例代码
Aug 28 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
vue组件之Alert的实现代码
Oct 17 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
element-ui中的select下拉列表设置默认值方法
Aug 24 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
Jul 18 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
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
python连接oracle数据库实例
2014/10/17 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
python输入中文的实例方法
2020/09/14 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
最新党员思想汇报
2014/01/01 职场文书
售后求职信范文
2014/03/15 职场文书
食品安全工作方案
2014/05/07 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
诚信考试主题班会
2015/08/17 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
详解Python为什么不用设计模式
2021/06/24 Python