# Set 和 Map 数据结构

# Set

  • Set.prototype.size:返回 Set 实例的成员总数。

  • Set.prototype.add(value):添加某个值,返回 Set 结构本身。

  • Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。

  • Set.prototype.has(value):返回一个布尔值,表示该值是否为 Set 的成员。

  • Set.prototype.clear():清除所有成员,没有返回值。

  • Set.prototype.keys():返回键名的遍历器

  • Set.prototype.values():返回键值的遍历器

  • Set.prototype.entries():返回键值对的遍历器

  • Set.prototype.forEach():使用回调函数遍历每个成员

const set = new Set([1, 2, 3, 4, 4]);
[...set];
// [1, 2, 3, 4]
[...new Set([NaN, NaN])]; // [NaN]

# WeakSet

  • WeakSet 的成员只能是对象,而不能是其他类型的值

  • WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用

  • WeakSet 没有 size 属性,没有办法遍历它的成员。

  • WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。

  • WeakSet.prototype.delete(value):清除 WeakSet 实例的指定成员。

  • WeakSet.prototype.has(value):返回一个布尔值,表示某个值是否在 WeakSet 实例之中。

# Map

  • 和对象类似,对象的 key 只能是 string,Mapkey 可以使用任意类型的值。

  • Map.size

  • Map.prototype.set(key, value)

  • Map.prototype.get(key)

  • Map.prototype.has(key)

  • Map.prototype.delete(key)

  • Map.prototype.clear()

  • Map.prototype.keys():返回键名的遍历器。

  • Map.prototype.values():返回键值的遍历器。

  • Map.prototype.entries():返回所有成员的遍历器。

  • Map.prototype.forEach():遍历 Map 的所有成员。需要特别注意的是,Map 的遍历顺序就是插入顺序。

# WeakMap

  • WeakMap 只接受对象作为键名(null 除外)
  • WeakMap 的键名所指向的对象,不计入垃圾回收机制。
  • WeakMap 没有遍历操作(即没有 keys()values()entries()方法),也没有 size 属性。
  • WeakMap 无法清空,即不支持 clear 方法。因此,WeakMap 只有四个方法可用:get()set()has()delete()