JS 乐园: Map && WeakMap

169 阅读1分钟

Map:

Object类似, 但还是有不同:

  1. Map 可以哦那个任何Javascript数据类型作为键, 而 Object 只能用数值, 字符串 或者 symbol
  2. Map 会维护插入键值对的插入顺序, 可以根据插入顺序执行迭代操作

Object 还是 Map

  1. 内存占用: MapObject 更加节省空间
  2. 插入性能: Map 在浏览器中插入的速度要比Object更加快速点
  3. 查找速度: Object > Map
  4. 删除速度: Map > Object

WeakMap

  1. WeakMap中的键只能是Object 或 继承来自Object的类型
  2. WeakMap主要是在 弱引用, 垃圾回收方面与 Map 有差异, WeakMap在任何情况下都有可能会被垃圾回收, 因此没有迭代能力
  3. WeakMap 非常适合保存关联元数据
 const m = new Map();
 const loginButton = document.querySelector('#login');
 m.set(loginButton, {diable:true}) // 因为是 map 类型所以如果及时 loginButton 被删除了, 那么该 set 还依旧存在, 因为 m 是 Map 不会被垃圾回收,再有在完成该代码片段之后,再回被回收
 
 const m = new WeakMap(); // 但是如果是 WeakMap 类型, 如果 loginButton 被从 DOM 删除后, 垃圾回收就会把 m 也回收掉, 因为是一个 WeakMap 弱引用, 类似于 oc 里面额弱引用;