Set
Set对象是不可重复值的集合
Set内部使用Object.is()方法来判断两个数据项是否相等
方法:
has();
delete():Set中删除某个值,
clear():Set中删除所有值
forEach():方法来遍历Set中的数据项
WeakSet
WeakSet 和 Set 类似,都是不重复的值的集合,但是和 Set 有不同:
- WeakSet 的成员只能是对象,若调用了add()方法时传入了非对象的参数,则会抛出错误。如果在has()或者delete()方法中传入了非对象的参数则会返回false;
- WeakSet 的对象都是弱引用,即WeakSet 中对对象的引用不会被考虑进垃圾回收机制,即只要没有其他的对象引用该对象,则该对象就会被回收,而不管它在不在 WeakSet;
- Weak Set没有size属性;
- WeakSet不可迭代,因此不能用于for-of循环;
- WeakSet 无法暴露出任何迭代器(例如 keys() 与 values() 方法) ,因此没有任何编程手段可用于判断 Weak Set 的内容;
(由于这个特性,所以 WeakSet 适合临时存放一组对象和跟对象绑定的信息)
应用场景:
用于存储DOM节点,而不用担心这些节点从文档移除时会引发内存泄露
方法:
WeakSet 有三个方法:add, delete, has
Map
Map能够存放键值对,其中,键的去重是通过Object.is()方法进行比较,键的数据类型可以是基本类型数据也可以是对象,而值也可以是任意类型数据。
方法:
和Set一样
Weak Map
Weak Map对Map而言,就像是Weak Set相对于Set一样:Weak Map(或者Weak Set)都是存储对象弱引用的方式,在Weak Map(或者Weak Set)中,所有的键都必须是对象(尝试使用非对象的键会抛出错误),而且这些对象都是弱引用,不会干扰到垃圾回收。当Weak Map中的键在Weak Map之外不存在引用时,该键值对会被移除