一、Map()
1、set() 设置键和值
let Amap = new new Map()
Amap.set(1,'aaa').set(2,'bbb').set(3,'ccc')//链式操作
2、get() 通过键获取值
Amap.get(1)
3、has() 判断是否存在某个值
Amap.has(1)
4、size 返回Map长度
Amap.size
5、clear() 清空Map
Amap.clear()
6、entries() 便利
const Amap = new Map([
[1,'aaa'],
[2,'bbb']
])
for(let [key,value] of Amap.entries()){
console.log(key , value)
}
二、WeakMap()
如果使用对象作为映射的键,这个对象后来被丢弃(所有的引用解除),试图让垃圾回收回收其内存,那么map本身仍然会保持其项目,也就是仍然引用其项目。可以使用WeakMap来解决。
WeakMap是map的变体,二者的多数外部行为特征是一样的,区别在于内部内存分配(垃圾回收)的工作方式。
WeakMap只接受对象作为建,这点与Map不同,Map既可以使用对象,也可以使用简单类型作为键。
WeakMap没有clear()、size方法/属性,也不会暴露任何键、值或项目上的迭代器。
const weakmap = new WeakMap()
const x = {id:'001'}
weakmap.set(x,'aaa')
weakmap.has(x)//true
三、Set()
Set的API和Map类似。只是add()替换set()
Set固有的唯一性是它最有用的特性。set的唯一性不允许强制转换,也就是说1和‘1’是不同的值
const set = new Set()
const x = {id:1},y = {id:2}
set.add(x)
set.add(y)
set.add(x)
set.size//2
set.delete(y)
set.size//1
set.clear()
set.size//0
const x = {id:1},y = {id:2}
const set = new Set([x,y])
四、WeakSet()
WeakSet的值必须是对象,而并不像Set一样可以是原生类型值。
const weakset = new WeakSet()
const x = {id:1},
y = {id:2}
weakset.add(x).add(y)
x = null // x可以被垃圾回收
y = null // y可以被垃圾回收