Set、Weak Set、Map、Weak Map学习笔记

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之外不存在引用时,该键值对会被移除

posted @ 2020-11-15 23:36  哥哦狗子  阅读(140)  评论(0编辑  收藏  举报