ES6 Map和WeakMap
1.Map的学习
a.Map的定义:“值-值”,更完善的Hash结构;
const m = new Map()
const o = { p: 'hello Map' }
m.set(o, 'content')
const m = new Map(o)
b.Map的实例属性与操作方法
map.size
map.set(key, value)
map.get(key)
map.has(key)
map.delete(key)
map.clear()
遍历方法 keys()/values()/entries()/forEach
2.WeakMap的知识点
a.WeakMap的键名所引用的对象是弱引用
let map = new Map()
let key = new Array(5)
map.set(key, 1)
map.delete(key)
key = null
const wm = new WeakMap()
let key = new Array(5)
wm.set(wm, 1)
key = null
WeakMap保持对键名所引用对象的弱引用,只要所引用的对象的其他引用被清除,垃圾回收机制就会释放该对象所占用的内存。
b.WeakMap的应用
1)在DOM对象上保存相关数据
let wm = new WeakMap(), element = document.querySelector(".element")
wm.set(element, "data")
element.parentNode.removeChild(element)
element = null
2)数据缓存
const cache = new WeakMap()
function countOwnKeys (obj) {
if (cache.has(obj)) {
return cache.get(obj)
} else {
const count = Object.keys(obj).length
cache.set(obj. count)
return count
}
}
3)私有属性
const privateData = new WeakMap()
class Person () {
constructor (name, age) {
privateData.set(this, {name: name, age: age})
}
getName () {}
}
export default Person