理解Map、WeakMap、Set、WeakSet区别

一、Map与Object对比

a. 具体用法不同,Map是map.set()、map.get()、map.has()、map.delete(),Object可以直接obj.xx进行设置,in判断是否存在(有bug,可以拿到原型上的)等,Map的key可以重名(后者覆盖前者),Object的Key不可重名

b. Map可以用任意类型值作为key,Object必须用string、symbol作为key

c. Map是有序的,Object是无序的

d. Map可以使用size属性获取长度/大小,Object需要循环获取

e. Map可以使用for-of迭代,Object不可迭代(可以通过Object.values\keys方式进行迭代)

f. 增删改查,Map性能比Object好,底层对Map做了特殊处理

g. Map没有属性描述符等,故相比Object消耗的内存要少

f. Map(这点和Set特性一致)中,0、+0、-0为同一值,以及NaN,故只能存在其中一个,且引用数据类型作为Key时,如果引用地址一致,那么也只能保持一个,如:

h. 可以使用二维数组初始化一个map,如:

二、WeakMap与Map对比

a. WeakMap的key必须是对象,否则报错

b. WeakMap不可迭代,但可以使用map.set()、map.has()、map.delete()方法,但没有get方法

c. WeakMap是弱引用,垃圾回收时,如果手动清理引用,会造成WeakMap的数据丢失,但Map不会,如:

上图可知,当obj被GC回收后,Map将继续保持引用,但WeakMap却造成了数据丢失。

d. 不可使用二维数组初始化WeakMap

三、Set与Map对比

a. 方法不同,Set是set.add(),set.clear(),set.delete(),set.has(),也有size属性等

b. 0、+0、-0为同一值,以及NaN,故只能存在其中一个,且引用数据类型作为Key时,如果引用地址一致,那么也只能保持一个

c. 值是唯一存在的

d. 可以使用二维数组初始化Set,如:

e. Set也是使用for-of进行迭代

四、WeakSet与Set

基本上和WeakMap一致,但WeakSet没有get方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值