Set
无论是什么语言,还是什么数据结构,感觉Set没什么可说的,还是直接上API靠谱:
1.new Set:创建一个新的、空的 Set。
2.new Set(iterable):从任何 可遍历数据 中提取元素,构造出一个新的集合。
3.set.size:获取集合的大小,即其中元素的个数。
4.set.has(value):判定集合中是否含有指定元素,返回一个布尔值。
5.set.add(value):添加元素。如果与已有重复,则不产生效果。
6.set.delete(value):删除元素。如果并不存在,则不产生效果。add()和delete()都会返回集合自身。
7.set[Symbol.iterator]() :返回一个新的遍历整个集合的迭代器。一般这个方法不会被直接调用,因为实际上就是它使集合能够被遍历,我们可以直接写 for (v of set) 等等。
8.set.forEach(f):类似于数组的forEach方法。
9.set.clear():清空集合。
10.set.keys()/set.values()/set.entries() 返回各种迭代器,它们是为了兼容Map而提供的。
Map
Map跟Set一样,很熟悉了,这里直接列出API:
1.new Map:返回一个新的、空的Map 。
2.new Map(pairs):根据所含元素形如[ value]的数组pairs来创建一个新的Map。这里提供的pairs可以是一个已有的Map对象,可以是一个由二元数组组成的数组,也可以是逐个生成二元数组的一个生成器等等。
3.map.size:返回Map中项目的个数。
4.map.has(key):测试一个键名是否存在。
5.map.get(key):返回一个键名对应的值,若键名不存在则返回 undefined。
6.map.set(key, value):添加一对新的键值对,如果键名已存在就覆盖。
7.map.delete(key):按键名删除一项。
8.map.clear():清空 Map。
9.map[Symbol.iterator]():返回遍历所有项的迭代器,每项用一个键和值组成的二元数组表示。
10.map.forEach(f):是对应着Array.prototype.forEach()。
11.map.keys():返回遍历所有键的迭代器。
12.map.values():返回遍历所有值的迭代器。
13.map.entries():返回遍历所有项的迭代器,就像 map[Symbol.iterator]() 。实际上,它们就是同一个方法,不同名字。
WeakMap/WeakSet
跟JAVA的强引用、弱引用类似,都是考虑到对象的内存回收问题,WeakMap/WeakSet与Map/Set几乎一样的行为,除了以下一些限制:
①WeakMap只支持new、 has、 get、 set和delete。
②WeakSet只支持new、 has、 add和delete。
③WeakSet的值和WeakMap的键必须是对象。
④这两种弱集合都不可迭代。