理清Set、WeakSet、Map、WeakMap

24 阅读1分钟

理清Set、WeakSet、Map、WeakMap

初识
1. Set

Set​ 是一种集合数据结构,它允许存储任何类型的唯一值,即成员的值是唯一的,没有重复的值。 无论是原始值还是对象引用。

let set = new Set([1,2])
set.add(1)
console.log(set.size) // 2

Set有很多的方法

image-20251107065740-70seayx.png

2. WeakSet

WeakSet​是一种集合,但只能存储对象引用,而不能是原始值。同时对象是弱引用,不会阻止垃圾回收。

let weakSet = new WeakSet();
let obj = {};
weakSet.add(obj);
// 当obj被垃圾回收时,weakSet中的obj也会被自动移除

WeakSet​的方法没有Set丰富,不具备可遍历性

image-20251107070059-7pwphzx.png

3. Map

Map是一种键值对集合,键可以是任何类型,但是我们在使用过程中不会使用对象作为键。

let map = new Map();
let key = { a: 1 };
map.set(key, 'value');
console.log(map.get(key)); // 'value'

Map也有很多的方法

image-20251107070305-t363otr.png

4. WeakMap

WeakMap​是一种键值对集合,其中键必须是对象,不能是原始值。同时对象是弱引用,不会阻止垃圾回收

let weakMap = new WeakMap();
let key = {};
weakMap.set(key, 'private data');
// 当key被垃圾回收时,weakMap中的键值对也会被自动移除

同样的,WeakMap不具备可遍历性。

image-20251107070534-37q4s2s.png

总结

Set和WeakSet、Map和WeakMap的差异性很明确,主要是因为弱引用的区别,所以名字也是Weak。弱引用则对对象的垃圾回收起着至关重要的作用。