天天看点

(第二题) 介绍一下Set、WeakSet、Map及WeakMap的区别

Set

类似于数组,但成员唯一,没有重复值,是以 [Value, value] 的形式储存

  • Set实例属性
    • constructor: 构造函数(即Set本身)
    • size : 成员数量
  • Set实例方法

    [操作方法]

    • add(value):新增,相当于 array里的push
    • delete(value):存在即删除集合中value
    • has(value):判断集合中是否存在 value
    • clear():清空集合
    [遍历方法]
    • keys():返回一个包含集合中所有键的迭代器
    • values():返回一个包含集合中所有值得迭代器
    • entries():返回一个包含Set对象中所有元素得键值对迭代器
    • forEach(callbackFn, thisArg):用于对集合成员执行callbackFn操作,如果提供了 thisArg 参数,回调中的this会是这个参数,没有返回值
  • Set集合转数组:
    Array.from(new Set(array))
       或者
       [...new Set(array)]
               

WeakSet

WeakSet 对象允许你将弱引用对象储存在一个集合中

  • WeakSet 与 Set 的区别:
    • WeakSet 只能储存对象引用,不能存放值,而 Set 对象都可以存储
    • WeakSet 对象中储存的对象值都是被弱引用的,即垃圾回收机制不考虑 WeakSet 对该对象的应用。且不能遍历
  • WeakSet实例属性
    • constructor: 构造函数
  • WeakSet实例方法: 只有操作方法,无遍历方法
    • add(value):在WeakSet 对象中添加一个元素value
    • has(value):判断 WeakSet 对象中是否包含value
    • delete(value):删除元素 value
    • clear():清空所有元素,注意该方法已废弃

Map

以 [key, value] 的形式储存元素

  • Map实例属性:
    • constructor:构造函数
    • size:返回集合中所包含的元素个数
  • Map实例的方法:

    [操作方法]

    • set(key, value):中添加新元素
    • get(key):通过键查找特定的数值并返回
    • has(key):判断是否存在键key
    • delete(key):通过键 key 移除对应的数据
    • clear():删除所有元素
    [遍历方法]
    • Keys():所有键名以迭代器形式返回
    • values():所有数值以迭代器形式返回
    • entries():返回所有成员的迭代器
    • forEach():遍历所有成员
  • Map转数组:使用扩展运算符(…)
    [...new Map(array)]
               

WeakMap

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

WeakMap 中,每个键对自己所引用对象的引用都是弱引用,在没有其他引用和该键引用同一对象,这个对象将会被垃圾回收(相应的key则变成无效的),所以,WeakMap 的 key 是不可枚举的。

  • WeakMap实例属性:
    • constructor:构造函数
  • WeakMap实例方法,只有操作方法,无遍历方法
    • has(key):判断是否有 key 关联对象
    • get(key):返回key关联对象(没有则则返回 undefined)
    • set(key):设置一组key关联对象
    • delete(key):移除 key 的关联对象

总结

Set

  • 成员唯一、无序且不重复
  • [value, value],键值与键名是一致的(或者说只有键值,没有键名)
  • 可以遍历,方法有:add、delete、has

WeakSet

  • 成员都是对象
  • 成员都是弱引用,可以被垃圾回收机制回收,不容易造成内存泄漏
  • 不能遍历,方法有add、delete、has

Map

  • 本质上是键值对的集合,类似集合
  • 可以遍历,方法很多可以跟各种数据格式转换

WeakMap

  • 只接受对象作为键名(null除外),不接受其他类型的值作为键名
  • 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的
  • 不能遍历,方法有get、set、has、delete