Skip to content

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区别

    1. Map 对象的键可以是任何类型,但 WeakMap 对象中的键只能是Object类型(null除外)
    1. 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区别

    1. WeakSet 的成员只能是Object类型(除null外),而不能是其他类型的值
    1. WeakMap 对象是不可枚举的,无法获取集合的大小
js
let ws = new WeakSet()
let obj = {}
ws.add(obj) // 只能是除Null外的Object类型
console.log(ws.has(obj)) // false
console.log(ws.add(null)) // 报错