跳到主要内容

简述Set、Map、WeakSet 和 WeakMap 的区别 ?

参考答案:

Set、Map、WeakSet和WeakMap是ES6中提供的四种数据结构,它们各自具有不同的特点和使用场景。

  1. Set:Set是一种集合数据结构,它允许存储任何类型的唯一值,无论是原始值还是对象引用。Set具有一些方法,如add()用于添加元素,delete()用于删除元素,has()用于检查元素是否存在,以及clear()用于清空集合。
  2. Map:Map是一种键值对的数据结构,类似于集合,但每个元素都有一个键和一个值。Map允许使用任何类型的值(包括对象)作为键。Map提供了一些方法,如set()用于添加或更新元素,get()用于获取元素的值,has()用于检查元素是否存在,delete()用于删除元素,以及clear()用于清空Map。
  3. WeakSet:WeakSet是一种特殊的集合,它只接受对象作为成员,并且这些对象的引用是弱引用,这意味着如果没有其他引用指向这些对象,它们可以被垃圾回收机制回收。WeakSet的一个主要应用场景是保存DOM节点,因为这样可以避免造成内存泄漏。WeakSet的一个主要限制是它是不可枚举的,即无法遍历其成员。
  4. WeakMap:WeakMap是一种特殊的键值对数据结构,它只接受对象作为键名(null除外),并且键名是弱引用。这意味着如果键名所指向的对象被垃圾回收,那么该键名在WeakMap中将无效。WeakMap的键值可以是任意类型。同样,WeakMap也是不可枚举的。

总的来说,Set和Map用于存储数据,而WeakSet和WeakMap则用于在不影响垃圾回收的情况下存储对对象的引用。Set和Map的键和值可以是任何类型,而WeakSet和WeakMap的键必须是对象,且对对象的引用是弱引用。此外,WeakSet和WeakMap都是不可枚举的,即无法遍历其成员。