object和map的使用场景

182 阅读1分钟

1. 是否能区分字符串

  • obj不可以
    // 读取
    const obj = { 0: '张三', 1: '李四', 2: '王二' }
    console.log(obj[0]) // '张三'
    console.log(obj['0']) // '张三'
    // 赋值
    obj['0'] = '赵六'
    console.log(obj) // {0: '赵六', 1: '李四', 2: '王二'}
  • map类型可以
    // 读取
    let mp = new Map([[0, '张三'], [1, '李四'], [2, '王二']])
    console.log(mp.get(0)) // '张三'
    console.log(mp.get('0')) // undefined
    // 赋值
    mp.set(0, '赵六')
    console.log(mp) // [[0, '赵六'], [1, '李四'], [2, '王二']]

2. 遍历顺序是否稳定

  • Object.keys遍历obj顺序不能保证可靠
    const obj = { name: '张三', age: 10 }
    Object.keys(obj) // 顺序不可靠。可能会遍历出 ['name', 'age']、['age', 'name']
  • map类型遍历顺序可靠
    let mp = new Map([['name', '张三'], ['age', 10]])
    console.log([...mp.keys()]) // ['name', 'age']

3. 属性可以是哪些值

  • object属性必须由数字、字符串构成
   const obj = { 0: '张三', '1': '李四', age: 18 } // {0: '张三', 1: '李四', age: 18}
  • map属性没什么限制
    const obj = {name:'z'}
    let mp = new Map([[0, '张三'], ['age', 10], ['1', '李四'], [true, '真'], [obj, 'sss']])
    console.log(mp.get(obj)) // 'sss'

4. 内存消耗

  • map相比object更加节省内存。大约可以节省20%~50%内存

5. 性能对比

  • map相比object性能相对更好