【JavaScript基础】map、weakmap、object的区别

1.map和object的区别

Map

Object

意外的键

Map默认情况不包含任何键,只包含显式插入的键。

Object 有一个原型, 原型链上的键名有可能和自己在对象上的设置的键名产生冲突。

键的类型

Map的键可以是任意值,包括函数、对象或任意基本类型。

Object 的键必须是 String 或是Symbol。

键的顺序

Map 中的 key 是有序的。因此,当迭代的时候, Map 对象以插入的顺序返回键值。

Object 的键是无序的

Size

Map 的键值对个数可以轻易地通过size 属性获取

Object 的键值对个数只能手动计算

迭代

Map 是 iterable 的,所以可以直接被迭代。

迭代Object需要以某种方式获取它的键然后才能迭代。

性能

在频繁增删键值对的场景下表现更好。

在频繁添加和删除键值对的场景下未作出优化。

2.map和weakmap的区别

        首先,map和weakmap本质上都是键值对的集合。

        他们两个的区别在于:

        1.map集合的键值对中的键可以是任意值,包括函数、对象或任意基本类型;而weakmap集合的键值对中的键必须是对象。

        2.第二点区别是二者身上所存在的方法上,map集合上有size属性、set方法、get方法、has方法,delete方法以及clear方法;而weakmap集合相比于map集合对用户的可见性更低,不支持通过forEach方法,size属性及claer方法。其clear()方法已经被弃用,所以可以通过创建一个空的WeakMap并替换原对象来实现清除。

        3.第三点区别在于强引用与弱引用。WeakMap的设计目的在于,有时想在某个对象上面存放一些数据,但是这会形成对于这个对象的引用。一旦不再需要这两个对象,就必须手动删除这个引用,否则垃圾回收机制就不会释放对象占用的内存。

        而WeakMap的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用

总结:

  • Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
  • WeakMap 结构与 Map 结构类似,也是用于生成键值对的集合。但是 WeakMap 只接受对象作为键名( null 除外),不接受其他类型的值作为键名。而且 WeakMap 的键名所指向的对象,不计入垃圾回收机制。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值