Set
概述
set本身是一个构造函数,它是es6提供了一个新的数据结构,类似于数组 (但类型不是数组),返回的成员都是唯一的
使用
1、声明 set
类型是 object
2、实现数组去重
不过此时这个 类型是 object类型的,若我们想转为数组类型的,可以利用解构
方法
size 返回个数
返回的个数是 去重之后的个数
add 增加元素
delete 删除元素
clear 清空
has 判断元素是否存在
遍历
利用for of 进行遍历
返回的是值
keys()
values()
可以直接省略 values方法,
entries()
返回的是数组形式,里面包括键名和键值
数组中没有键名,只有键值,所以两个成员完全相同
利用 forEach进行遍历
返回的也就是 键名 + 键值
Set结构转为数组
Array.from 将Set结构转为数组
Set中的NaN
Set内部不会进行类型转换,判断两个值是否相同,使用的算法类似 ===
与 === 的区别是
Set内部认为 NaN === NaN
而 === 认为 NaN !== NaN
Set中的空对象
向 Set中add两个空对象,被视为两个值
属性
Set.prototype.constructor
构造函数,默认的就是Set函数
WeakSet
含义
与Set结构类似,也是不重复值的集合,不过 WeakSet的成员只能是对象
WeakSet中为弱引用
也就是说 垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,若其他对象都不再引入该对象,那么垃圾回收机制不会考虑WeakSet对该对象的引入,会自动的回收该对象所占的内存
Map
含义
map数据结构,类似于对象,也是键值对的集合 ,不过 “键” 的范围不限于字符串 ,各种类型的值都可以当成键,也包括对象
使用
可以接受一个数组作为参数,这个数组里面的值是一个个 表示键值对的数组
对同一个值进行赋值
若对同一个值进行赋值,那么会覆盖掉前一个
方法
size
返回map结构的成员总数
set
1、普通写法
若 key已经有值了,那么就是更改;否则就 生成该值
2、链式写法
get
读取
has
是否存在,返回boolean值
delete
删除
clear
清空
遍历
map结构和set结构里面的 遍历差不多
与其他数据结构互相转换
map转为数组
利用 扩展运算符
数组转为map
将数组传入map,就可以转为map了