Map&WeakMap和Set&WeakSet
强引用与弱引用
强引用:一般我们创建一个对象,都是建立一个强引用
js
let obj = new Object()
弱引用:与强引用相对。一个对象如果是被弱引用的,则可能在任何时刻被垃圾回收机制回收。#6
js
let wm = new WeakMap()
let obj = new Object()
wm.set(obj, 123) // 【后续如果没有引用obj,则obj会被回收。因为垃圾回收机制不考虑该对象在weakMap中的引用】
Map & WeakMap区别
- Map 对象的键可以是任何类型,但 WeakMap 对象中的键只能是Object类型(null除外)
- WeakMap 对象是不可枚举的,无法获取集合的大小
WeakMap只有四个方法可用:get()、set()、has()、delete()
js
let arr = []
let wm = new WeakMap()
wm.set(arr, 1)
arr = null // 手动释放
console.log(wm.get(arr)) // undefined
Set & WeakSet区别
- WeakSet 的成员只能是Object类型(除null外),而不能是其他类型的值
- WeakMap 对象是不可枚举的,无法获取集合的大小
js
let ws = new WeakSet()
let obj = {}
ws.add(obj) // 只能是除Null外的Object类型
console.log(ws.has(obj)) // false
console.log(ws.add(null)) // 报错