理清Set、WeakSet、Map、WeakMap
初识
1. Set
Set 是一种集合数据结构,它允许存储任何类型的唯一值,即成员的值是唯一的,没有重复的值。 无论是原始值还是对象引用。
let set = new Set([1,2])
set.add(1)
console.log(set.size) // 2
Set有很多的方法
2. WeakSet
WeakSet是一种集合,但只能存储对象引用,而不能是原始值。同时对象是弱引用,不会阻止垃圾回收。
let weakSet = new WeakSet();
let obj = {};
weakSet.add(obj);
// 当obj被垃圾回收时,weakSet中的obj也会被自动移除
WeakSet的方法没有Set丰富,不具备可遍历性。
3. Map
Map是一种键值对集合,键可以是任何类型,但是我们在使用过程中不会使用对象作为键。
let map = new Map();
let key = { a: 1 };
map.set(key, 'value');
console.log(map.get(key)); // 'value'
Map也有很多的方法
4. WeakMap
WeakMap是一种键值对集合,其中键必须是对象,不能是原始值。同时对象是弱引用,不会阻止垃圾回收。
let weakMap = new WeakMap();
let key = {};
weakMap.set(key, 'private data');
// 当key被垃圾回收时,weakMap中的键值对也会被自动移除
同样的,WeakMap不具备可遍历性。
总结
Set和WeakSet、Map和WeakMap的差异性很明确,主要是因为弱引用的区别,所以名字也是Weak。弱引用则对对象的垃圾回收起着至关重要的作用。