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的键会检查变量的引用,只要其中任意一个引用被释放,该键值对就会被删除。