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

 

posted @ 2018-11-09 16:36  胖糖糖爱吃肉  阅读(894)  评论(0编辑  收藏  举报