Set
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
NaN 是与 NaN 相等的(虽然 NaN !== NaN),剩下所有其它的值是根据 === 运算符的结果判断是否相等。
基本集合操作
1 | let setA = new Set([1, 2, 3, 4]), |
数组去重
1 | const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]; |
Map
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Map 是一个键值对的集合,很像 Object。但主要的区别是,Map 允许所有数据类型作为键。
1 | let map = new Map(); |
将NaN作为Map的键
1 | let myMap = new Map(); |
Map 与 数组
使用常规的Map构造函数可以将一个二维键值对数组转换成一个Map对象
1 | let kvArray = [["key1", "value1"], ["key2", "value2"]]; |
用 Object.entries(obj) 初始化map
1 | let map = new Map(Object.entries({ |
使用Array.from函数可以将一个Map对象转换成一个二维键值对数组
复制Map
1 | var original = new Map([ |
合并Map
1 | let first = new Map([ |
WeakMap + WeakSet
WeakMap 他的键必须是对象, 不能是基础类型的值
相比于 Map 与 Set 的强引用,弱引用可以令对象在 “适当” 情况下正确被 GC 回收,减少内存资源浪费。
在弱引用的情况下,GC 回收时,不会把其视作一个引用;如果没有其他强引用存在,那这个对象将被回收
1 | // 1. WeakMap 键必须是对象 |