关于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 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

弱引用
  // Map 强引用
  let obj = {
    name: "kite",
  };
  const map = new Map();
  map.set(obj, "value");
  obj = null;

  // WeakMap 弱引用
  let obj2 = {
    name: "smile",
  };
  const weakMap = new WeakMap();
  weakMap.set(obj2, "weak");
  obj2 = null;

   控制台结果:

 Map 为强引用,将obj置为null并不会使 { name: kite } 被垃圾回收,因为还有map引用了 { name: kite };

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 对象允许你将弱保持对象存储在一个集合中。

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

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

实例方法

  • add(value)
  • delete(value)
  • has(value) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值