当前位置:首页 > 日记 > 正文

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

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

本文实例讲述了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,返回ss.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程序设计有所帮助。

相关文章

PHP sleep | 函数, usleep | 函数

PHP sleep | 函数, usleep | 函数

函数,电脑软件,PHP,sleep,usleep,PHP sleep() 函数定义和用法sleep() 函数延迟代码执行若干秒。语法sleep(seconds)seconds 必需。以秒计的暂停时间。返回值若成功,返回 0,否则返回 false。错误/异常如果指定的描述 seconds 是负数,该函数将生…

HTTP 错误 401.1 - 未经授权:访问由

HTTP 错误 401.1 - 未经授权:访问由

无效,错误,凭据,未经授权,被拒,IUSR账号被禁用 症状举例: HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。 原因分析: 由于用户匿名访问使用的账号是IUSR_机器名,因此如果此账号被禁用,将造成用户无法访问。 解决办法: 控制面板->管…

Photoshop高手人物处理视频教程

Photoshop高手人物处理视频教程

视频教程,人物,高手,电脑软件,Photoshop,   滤镜主要是用来实现图像的各种特殊效果。它在Photoshop中具有非常神奇的作用。滤镜的操作是非常简单的,但是真正用起来却很难恰到好处。滤镜通常需要同通道、图层等联合使用,才能取得…

基本的:PS图象处理软件模块功能使用

基本的:PS图象处理软件模块功能使用

模块,图象,详解,处理软件,功能,PS图象处理软件是一个功能强大的图像处理软件,它可以产生一个令人难以置信的完美的图像合成,,也可以修复的照片,还可以制作精美的设计,专业的印刷设计、网页设计、包装设计、无所不能,因此,PS图象处理软件是常用的平…

angular或者js怎么确定选中ul中的

angular或者js怎么确定选中ul中的

几个,电脑软件,js,angular,li,刚来新公司接到新的需求做一个知识库页面红色的是单选 蓝色的是多选 这些都是需要传递到后台的 开始不知道如何解决 下班后在家想到一个很巧妙的办法 不多说上代码 箭头所指就是在li里写一个隐藏的radio标签,把…

在Painter 8中如何自定义新建笔刷?

在Painter 8中如何自定义新建笔刷?

自定义,笔刷,电脑软件,Painter,  在painter 8中自定义新建笔刷的方法和之前的版本有些不同,这里集中举例说明这些技巧,今天我们来看看如何在painter 8中自定义新建笔刷,来看看吧!1.如果要制作一般的笔刷图标,用矩形选区选定图片某个区域就行。…

IIS(w3wp.exe)几乎占用服务器大量(100

IIS(w3wp.exe)几乎占用服务器大量(100

带宽,解决方法,服务器,电脑软件,w3wp,解决办法:不允许PHP使用网络,把php.ini里的allow_url_fopen 值改为allow_url_fopen = Off如果不行;extension=php_sockets.dll (限制使用sockets.dll);ignore_user_abort = On 这两项前加上分号。但默认这…

vue 计时器组件的实现代码

vue 计时器组件的实现代码

计时器,组件,代码,电脑软件,vue,整理文档,搜刮出一个vue 计时器组件的代码,稍微整理精简一下做下分享。<template> <div> <span :sendSync="sendSync" :autoStart="autoStart" :defaultVal="defaultVal" >{{countString}…

CSS位置设置元素定位模式详细解决

CSS位置设置元素定位模式详细解决

模式,设置,位置,元素定位,解决方案,首先,简要介绍 CSS的位置属性设置了元素的位置来定义要放置的元素的位置规则。 1,位置元素(定位元素)在位置属性划分为:相对(相对)、绝对(绝对)、固定(固定)或粘性(粘性)元素之后计算。 2个,顶部,右,左,左属性指定位置…

Windows下MySQL启动1067的解决方案

Windows下MySQL启动1067的解决方案

解决方案,启动,电脑软件,Windows,MySQL,前几天,我刚进去安装mysql刚刚开始。今天,公司发现公司不能启动服务报告1067个错误,在网上看到了一些方法,很多版本,下面是我的解决方案: 1。打开运行事件查看器——Windows日志——应用程序——找到错误…

如何使用word2013屏幕截图

如何使用word2013屏幕截图

屏幕截图,如何使用,电脑软件,  当我们使用word文档做学习笔记时,经常要把pdf文件中大块重要的文字截图保存在word文档中。那么下面就由小编给大家分享下使用word2013屏幕截图的技巧,希望能帮助到您,有需要的朋友可以来看看哦。使用屏幕截图…