ES6新数据结构Set与WeakSet用法分析


Posted in Javascript onMarch 31, 2017

本文实例讲述了ES6新数据结构Set与WeakSet用法。分享给大家供大家参考,具体如下:

新数据结构Set与WeakSet

1. Set

Set类似于数据,但是成员值都是唯一的。生成Set的方式如下。

var s = new Set();
[1,1,3,3,5,5].map( x => s.add(x) );
console.log(s); //Set {1, 3, 5}

没有重复值哟,如果面试官再让你编写数组去重的函数是不是简单多了。或者你可以这样写。

var set = new Set( [2,2,4,4,6,6] ); //Set {2, 4, 6}
console.log(set);

其实,Set作为构造函数使用时,接受的参数不仅可以是数组,任何类数组的对象也可以。Set的成员可以是对象,只是每个对象唯一。

那么,我们如何操纵Set呢。

s.add(val); //为s添加val,返回s
s.delete(val); //删除val,返回表示成功与否的布尔值
s.has(val); //返回表示s是否拥有成员val的布尔值
s.clear(); //清除所有成员

map与filter方法可以作用于数组,也可以用于Set(见第一个代码块)。

那么,我们如何遍历Set呢。

依然是 keys() , values() , entries() , forEach() . 举例如下(默认情况下Set的键与值相同):

var s = new Set();
var ul = document.getElementsByTagName('ul');
[1,1,3,3,5,5].map( x => s.add(x) );
for ( let key of s.keys() ){
  console.log(key); //1 , 3, 5
}
for ( let val of s.values() ){
  console.log(val); //1, 3,5
}
for ( let item of s.entries() ){
  console.log(item[0],item[1]); // 1 1 , 3 3, 5 5
}
for ( let [key,val] of s.entries() ){
  console.log(key,val); // 1 1 , 3 3, 5 5
}
s.forEach( function( val , key , ul ){
  console.log( this ); //ul
  console.log( val , key);
} , ul );

可以使用...扩展操作符把Set转换成数组。

2.WeakSet

WeakSet与Set类似,也是不重复的集合。区别在于:WeakSet的成员只能是对象;WeakSet中的对象是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用。当其他变量不再引用某对象,其将被垃圾回收机制回收,哪怕这个对象被WeakSet引用。这意味着,WeakSet的成员是无法被引用的,无法遍历WeakSet。WeakSet只有add、delete和has三个方法。注意:WeakSet没有size属性,也没有forEach方法。

对于WeakSet不能被遍历,可以这样解释。因为其成员都是弱引用,随时可能消失,遍历机制无法保证其成员一直存在。

那你可能问,WeakSet用来做什么,答,储存DOM节点,这样移除DOM时就可以不用担心内存泄漏了。

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
javascript操作cookie_获取与修改代码
May 21 Javascript
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
JQuery的Ajax跨域请求原理概述及实例
Apr 26 Javascript
利用jquery制作滚动到指定位置触发动画
Mar 26 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
js字符串引用的两种方式(必看)
Sep 18 Javascript
Bootstrap进度条实现代码解析
Mar 07 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
ES6新数据结构Map功能与用法示例
Mar 31 #Javascript
基于AGS JS开发自定义贴图图层
Mar 31 #Javascript
Node.js使用Express创建Web项目详细教程
Mar 31 #Javascript
ES6使用let命令更简单的实现块级作用域实例分析
Mar 31 #Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 #Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 #Javascript
Angularjs中使用指令绑定点击事件的方法
Mar 30 #Javascript
You might like
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
Javascript模块模式分析
2008/05/16 Javascript
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
Tesserocr库的正确安装方式
2018/10/19 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
this关键字的作用
2016/01/30 面试题
《姥姥的剪纸》教学反思
2014/02/25 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
捐助感谢信
2015/01/22 职场文书
学生会招新宣传语
2015/07/13 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python