Map 和 Set
- 有序和无序
- Map 和 Object 的区别
- Set 和数组的区别
有序和无序
- 有序:操作慢
- 无序:操作快,但无序
- 如何结合两者优点呢?--------二叉树、及其变种
Map 和 Object 的区别
- API 不同,Map 可以以任意类型为key
- Map 是有序结构(重要)
- Map 操作同样快
Set 和数组的区别
- API 不同
- Set 元素不能重复
- Set 是无序结构,操作很快
WeakMap 和 WeakSet
弱引用:JavaScript的强引用和弱引用_m0_53644435的博客-CSDN博客
- 弱引用,防止内存泄漏。
- WeakMap 只能用对象作为key,WeakSet只能用对象作为 value
- 没有 forEach 和 size,只能用 add delete has
const wMap = new WeakMap()
function fn() {
const obj = { name: '双越' }
wMap.set(obj, 'name info') // 只能用对象作为 key
}
fn()
console.log(wMap) // wMap 会为空
// 没有 forEach size ,只能 has delete add
//注意: gc 垃圾清理不一定是及时的!!(wMap 可能会不为空)
// WeakMap 场景
const userInfo = { name: '双越' }
const cityInfo = { city: '北京' }
userInfo.city = cityInfo
wMap.set(userInfo, cityInfo) // 建立一种关联关系,而且两者保持独立,而且**不影响彼此的销毁逻辑**
wMap.get(userInfo)
// WeakSet 弱引用,防止内存泄漏,只能用对象作为 value
// 没有 forEach size ,只能 has delete add
const wSet = new WeakSet()
// const set = new Set()
function fn() {
const obj = { name: '双越' }
wSet.add(obj)
// set.add(obj)
}
fn()