ES6系列_11之Set和WeakSet数据结构
一、Set
1.Set是什么?
Set是ES6 提供的一种新的数据结构。类似于数组。
2.Set能解决什么问题
Set和Array 的区别是Set不允许内部有重复的值,如果有只显示一个,相当于去重。
3.怎么使用Set相关东西
Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

(1)Set的声明
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"}
(2)Set值的增删查
追加add:
在使用Array的时候,使用push进行追加值,那Set稍有不同,它使用add进行追加。
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} setArr.add('4')
console.log(setArr);//Set {"1", "2", "3","4"}
删除delete:
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} setArr.delete("1") console.log(setArr);//Set {"2", "3"}
查找has:
用has进行值的查找,返回的是true或者false。
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} console.log(setArr.has("1"))//true console.log(setArr.has("0"))//false
删除clear:
清空所有
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} setArr.clear() console.log(setArr)//{}
set的循环 for…of…循环:
let setArr = new Set(['1','2','3']);
console.log(setArr);//Set {"1", "2", "3"} for (let item of setArr){
console.log(item); //1,2,3
}
forEach循环:
let setArr = new Set(['1','2','3']); setArr.forEach((value)=>console.log(value)) //1,2,3
size属性:
size属性可以获得Set值的数量。
let setArr = new Set(['1','2','3']); console.log(setArr.size)//
二、WeakSet
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。
首先,WeakSet 的成员只能是对象,而不能是其他类型的值。
其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
因此WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。
ES6 规定 WeakSet 不可遍历。
(1)WeakSet的声明以及赋值
声明只能先new一个空对象,然后在使用add方法将一个已定义的对象添加到其中。
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
weakObj.add(obj);
console.log(weakObj);
输出结果为:

WeakSet里边的值也是不允许重复的,比如:
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
let obj1=obj
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);
输出结果为:

实际为对象指向同一个地址,当对象不指向同一个地址,即使两个对象里面的值,相同也是可以添加到WeakSet里的。比如:
let weakObj=new WeakSet();
let obj={a:'1',b:'2'}
let obj1={a:'1',b:'2'}
weakObj.add(obj);
weakObj.add(obj1)
console.log(weakObj);
输出的结果为:

总结:在实际开发中Set用的比较多,WeakSet用的并不多,但是WeakSet对传入值必须是对象作了很好的判断。
ES6系列_11之Set和WeakSet数据结构的更多相关文章
- Set 和 WeakSet 数据结构
Set 和 WeakSet 数据结构是ES6新增. 它与数组非常相似,但是Set数据结构的成员都是唯一的. 特别说明:Set 中只能添加一个NaN 一.Set 数据结构: var set = new ...
- 大白话,讲编程之《ES6系列连载》汇总
如果你经历过2,3年前的前端开发,你一定感受过兼容IE6,7的痛苦,一定用过网页三剑客的dreamweaver编写html,面试的时候面试官一定会问你:会用PS切图吗? 刚开始的时候你发现,web前端 ...
- [js高手之路] es6系列教程 - 对象功能扩展详解
第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...
- [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...
- ES6 系列之 Babel 是如何编译 Class 的(下)
前言 ES5 寄生组合式继承 function Parent (name) { this.name = name; } Parent.prototype.getName = function () { ...
- es6系列-变量声明
es6系列所有文章都是阅读阮一峰老师的<ES6标准入门>(第2版)所做的读书笔记.方便日后查阅相关基础知识. git地址: https://github.com/rainnaZR/es6- ...
- ES6 系列之异步处理实战
前言 我们以查找指定目录下的最大文件为例,感受从 回调函数 -> Promise -> Generator -> Async 异步处理方式的改变. API 介绍 为了实现这个功能,我 ...
- [ES6系列-01]Class:面向对象的“新仇旧恨”
[原创]CoderPower 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 这是公众号(码路工人有力量)开通后的第二篇,写得还是有待改进吧.这次准备写一个关于ES6基础的短文系列,努力尽快 ...
- ES6系列之项目中常用的新特性
ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...
随机推荐
- EBS 定义并发参数常用值集
1.ORG_ID 2.DATE 3.YES_NO
- curl使用记录
$header = array("Connection: Keep-Alive", "Accept: text/html,application/xhtml+xml,ap ...
- 通读cheerio API-网络爬虫
所谓工欲善其事,必先利其器,所以通读了cheerio的API,顺便翻译了一遍,有些地方因为知道的比较少,不知道什么意思,保留了英文,希望各位不吝告诉我,然后一起把这个翻译完成. ###cheerio ...
- 知识梳理——HTML篇
浏览器内核: IE: trident Fixfox: gecko Safari: webkit Opera: 以前是presto,现已改用Google Chrome的Blink Chrome: Bli ...
- 转载-lvs-dr模式+keepalived双机
lvs+keepalived实现高可用群集配置详解 Mon 16 April 2012 来源: https://www.linuxzen.com/lvskeepalivedshi-xian-gao-k ...
- 201621123006 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 2 ...
- Chrome浏览器中使用 iframe 嵌入网页导致视频不能全屏的问题解决方法
今天无意中测试了下在 iframe 中嵌入视频, 发现全屏按钮在 Chrome 浏览器中居然无效, 试了好几个视频网站的视频都不能全屏, 但在其他浏览器中似乎都很正常, 应该是 Chrome 60 新 ...
- 认识 ARM、FPGA
0. ARM ARM:Advanced RISC machine,微处理行业的一家知名企业.适用于多种领域,如嵌入控制,消费.教育类多媒体.DSP和移动式应用. 优势: 功耗低,不容易发热.死机: 3 ...
- create newline in Github Bio
/********************************************************************************* * create newline ...
- ssh命令的使用
ssh命令是用来远程登录服务器的,默认端口号为22. 常用的命令是: ssh 用户名@服务器地址 然后回车,输入登录服务器的密码 登录服务器后要进行上传下载文件,可以用scp命令,命令格式为: s ...