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引导程序
Oct 26 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
JS动态修改图片的URL(src)的方法
Apr 01 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
Nov 27 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
微信小程序仿知乎实现评论留言功能
Nov 28 Javascript
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
vue-router的两种模式的区别
May 30 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
flexible.js实现移动端rem适配方案
Apr 07 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
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
Gird事件机制初级读本
2007/03/10 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
javascript 精粹笔记
2010/05/09 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
微信小程序实现的一键复制功能示例
2019/04/24 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
python创建进程fork用法
2015/06/04 Python
python3 shelve模块的详解
2017/07/08 Python
itchat和matplotlib的结合使用爬取微信信息的实例
2017/08/25 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
python的re模块使用方法详解
2019/07/26 Python
Python datetime包函数简单介绍
2019/08/28 Python
python 操作hive pyhs2方式
2019/12/21 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
一年级语文下册复习计划
2015/01/17 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python