关于Map、WeakMap、Set 、WeakSet

在计算机程序中,弱引用强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问的(或弱访问的),并因此可能在任何时刻被回收 

Map

Map 它类似于对象,也是键值对的集合,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。

实例属性和方法

  • Map实例支持size属性: 返回Map结构中的成员数目数量
  • set(key, value)方法: 设置Key所对应的键值,然后返回整个Map结构
  • get(key)方法: 读取key对应的键值,如果找不到key,返回undefined
  • has(key)方法: 返回一个布尔值,表示某个键是否在Map结构中
  • delete(key)方法: 删除某个键,返回true,删除失败返回false
  • clear()方法: 清除所有成员,没有返回值

WeakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

WeakMap与Map的区别

  • WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
  • WeakMap的键名所指向的对象不计入垃圾回收机制。它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此所有引用的对象的其他引用都被清除,垃圾回收站就会释放该对象所占用的内存。
  • WeakMap没有遍历操作(即没有key()、values()和entries()方法),也没有size属性
  • WeakMap无法清空,即不支持clear()方法。

实例方法

delete(key) 、 get(key)、 has(key) 、set(key, value)

Set

类似于数组,但是成员的值都是唯一的,没有重复。Set 本身是一个构造函数,用来生成Set数据结构

实例属性和方法

  • add(value): 添加某个值,返回Set结果本身
  • delete(value): 删除某个值,返回一个布尔值,表示删除是否成功
  • has(value): 返回一个布尔值,表示参数是否为Set成员
  • clear(value): 清除所有成员,没有返回值

遍历方法

  • Keys(): 返回键名的遍历器
  • values(): 返回键值的遍历器
  • entries(): 返回键值对的遍历器
  • forEach(): 使用回调函数遍历每个成员

WeakSet

WeakSet 对象允许你将弱保持对象存储在一个集合中。

扫描二维码关注公众号,回复: 15482599 查看本文章

它和 Set 对象的主要区别有:

  • WeakSet 只能是对象的集合,而不能像 Set 那样,可以是任何类型的任意值。
  • WeakSet 持弱引用:集合中对象的引用为引用。如果没有其它的对 WeakSet 中对象的引用,那么这些对象会被当成垃圾回收掉。
  • WeakSet是弱引用,在其内部有多少个成员取决于垃圾回收机制有没有运行, 运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此es6规定weakSet是不可遍历的。

实例方法

add(value)、delete(value)、has(value) 

猜你喜欢

转载自blog.csdn.net/qq_44376306/article/details/126916637