WeakMap 和 WeakSet
两者的特点
- 弱引用,防止内存泄露
- WeakMap 只能用对象作为 key,WeakSet 只能用对象做 value
- 没有 forEach 和 size,只能用 set/add delete has
WeakMap 用法
// WeakMap 弱引用,没有 forEach 和 size,只能用 set delete has
const wMap = new WeakMap
const a = {}
function fn() {
const obj = {name: 'lzw'}
a.obj = obj // 强引用
wMap.set(obj, 'name info') // 只能用对象作为 key
}
fn()
console.log(a) // obj: {name: 'lzw'}
// 浏览器控制台输入:wMap,结果:WeakMap{}
// 结果有可能不为空,这是因为 gc 垃圾清理不一定是及时的
// 可以在开发者工具->内存-> 垃圾桶图标,点击清理内存垃圾
// 场景使用,
const userInfo = {name: 'lzw.'}
const cityInfo = {city: '长沙'}
// userInfo.city = cityInfo
wMap.set(userInfo, cityInfo) // 建立关系,但两者确独立的,而且不影响彼此的销毁逻辑
console.log(wMap.get(userInfo))
WeakSet 用法
// WeakSet 弱引用,防止内存泄露,只能用对象作为 value
// 没有 forEach 和 size,只能用 add delete has
const wSet = new WeakSet()
const set = new Set()
function fn() {
const obj = {name: 'lzw.'}
// set.add(obj)
wSet.add(obj)
}
fn()
// 浏览器控制台输入:wSet,结果:WeakSet{}
// 结果有可能不为空,这是因为 gc 垃圾清理不一定是及时的
// 可以在开发者工具->内存-> 垃圾桶图标,点击清理内存垃圾