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 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
Jan 24 Javascript
Jquery判断IE6等浏览器的代码
Apr 05 Javascript
细说javascript函数从函数的构成开始
Aug 29 Javascript
Jquery动态添加及删除页面节点元素示例代码
Jun 16 Javascript
JS实现仿微博可关闭弹出层效果
Sep 21 Javascript
javascript从作用域链谈闭包
Jul 29 Javascript
BootStrap按钮标签及基本样式
Nov 23 Javascript
js仿微博动态栏功能
Feb 22 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 jQuery
详解Angular操作cookies方法
Jun 01 Javascript
微信小程序自定义轮播图
Nov 04 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同时支持GIF、png、JPEG
2006/10/09 PHP
一个好用的分页函数
2006/11/16 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php 文件上传实例代码
2012/04/19 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
javascript结合canvas实现图片旋转效果
2015/05/03 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
Python实现去除代码前行号的方法
2015/03/10 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
旅游管理实习自我鉴定
2013/09/29 职场文书
触摸春天教学反思
2014/02/03 职场文书
《灯光》教学反思
2014/02/08 职场文书
班组长竞聘书
2014/03/31 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
工程材料采购方案
2014/05/18 职场文书
竞聘上岗演讲
2014/05/19 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
银行求职信范文
2019/05/13 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS