Map 和 Set

209 阅读1分钟

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()