Map:
与Object类似, 但还是有不同:
Map可以哦那个任何Javascript数据类型作为键, 而Object只能用数值, 字符串 或者 symbolMap会维护插入键值对的插入顺序, 可以根据插入顺序执行迭代操作
Object 还是 Map
- 内存占用:
Map比Object更加节省空间 - 插入性能:
Map在浏览器中插入的速度要比Object更加快速点 - 查找速度:
Object>Map - 删除速度:
Map>Object
WeakMap
WeakMap中的键只能是Object或 继承来自Object的类型WeakMap主要是在 弱引用, 垃圾回收方面与Map有差异,WeakMap在任何情况下都有可能会被垃圾回收, 因此没有迭代能力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 里面额弱引用;