Map和weakMap区别

136 阅读1分钟

前言

之前看一篇文章学习手写深拷贝的时候,结尾提到使用weakMap比Map性能更好一些。自己感觉对这两种数据结构不熟悉,所以了解后写个文章记录一下。

Map

总所周知,Map数据类型的出现弥补了对象只能将字符或者symbol类型作为键值的缺点。下面介绍一下Map的特点

  • Map的键值可以是任何类型,包括函数,对象。
  • 可遍历
  • Map在频繁增删键值对时性能要比对象好
  • Map可以通过size方法直接获取自身键值对个数

WeakMap

再说下WeakMap的特点

  • 只能拿对象作为键值,且对键值的引用为弱引用
  • 不能遍历
  • 原型方法相较于Map来说较少

WeakMap

image.png

Map

image.png

分析

乍一看,WeakMap和Map比起来就是个弟弟,实际上他也有他的用处,最大的特点就在于Weak上。

WeakMap对键值的引用是弱引用,在没有其他引用时,对象键值会自动被垃圾回收,而Map对对象的引用是强引用,在不使用时必须手动清除,才能释放对象的所占的内存,不注意可能就会造成内存泄漏。

可能又有同学问了,那强弱引用又是啥呢。

简单粗暴点,弱引用时比较弱,没法保证所引用对象不被垃圾回收,当对象除了弱引用外没有其他引用的话,就会被垃圾回收。而强引用呢,当Map想放对象走的时候,手动清除一波,才能被垃圾回收带着,对象想自己跑是不行的