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实现的折叠导航示例
Nov 29 Javascript
js清理Word格式示例代码
Feb 13 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
Mar 26 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
jquery显示隐藏元素的实现代码
May 19 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
关于webuploader插件使用过程遇到的小问题
Nov 07 Javascript
JavaScript利用fetch实现异步请求的方法实例
Jul 26 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
vue-cli 3.x配置跨域代理的实现方法
Apr 12 Javascript
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
详解Javascript实践中的命令模式
May 05 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/10/09 PHP
一些关于PHP的知识
2006/11/17 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
详解Python中的Descriptor描述符类
2016/06/14 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
幼师自我鉴定范文
2013/10/01 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
低碳生活倡议书
2014/04/14 职场文书
优秀员工评优方案
2014/06/13 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
优秀党员个人总结
2015/02/14 职场文书
处理canvas绘制图片模糊问题
2022/05/11 Javascript