整理-ES6+

75 阅读1分钟

1、Object和Map的区别?Map和WeakMap的区别?

Object和Map的区别:

  • 键限制:Object只能使用数值、字符串、符号;Map可以任何JS数据类型
  • 迭代顺序:Object没有;Map会维护键值对的插入顺序
  • 存储量: 给定固定大小的内存,Map多
  • 插入性能: Map快
  • 查找速度: 更推荐Object
  • 删除性能: Map更快
  • 获取集合大小length: Map可以size

Map和WeakMap的区别

  • WeakMap的键只能是Object类型
  • 因为WeakMap中的键/值对任何时候都可能被销毁,所以没必要提供迭代其键/值对的能力,当然也没有clear方法,不能获取集合大小

WeakMap应用

  • WeakMap实现私有变量?
  • WeakMap保存关联元数据(DOM节点作为键,相比Map,这样DOM被删的时候就不担心这个引用还没被垃圾回收)

为什么创造WeakMap

如果我们使用对象作为常规 Map 的键,那么当 Map 存在时,该对象也将存在。它会占用内存,并且不会被垃圾回收机制回收。 WeakMap的键会检查变量的引用,只要其中任意一个引用被释放,该键值对就会被删除。