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 相关文章推荐
5款Javascript颜色选择器
Oct 25 Javascript
详解JavaScript中数组的相关知识
Jul 29 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
vue2利用Bus.js如何实现非父子组件通信详解
Aug 25 Javascript
js实现登录与注册界面
Nov 01 Javascript
使用D3.js创建物流地图的示例代码
Jan 27 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
Sep 01 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 Javascript
layer扩展打开/关闭动画的方法
Sep 23 Javascript
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php 团购折扣计算公式
2011/11/24 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
推荐11个实用Python库
2015/01/23 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
python实现用户名密码校验
2020/03/18 Python
Python更换pip源方法过程解析
2020/05/19 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
c语言常见笔试题总结
2016/09/05 面试题
事业单位公务员的职业生涯规划
2014/01/15 职场文书
珍惜时间演讲稿
2014/05/14 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
Java后台生成图片的完整步骤
2021/08/04 Java/Android