区别:
- API不通,Map可以以任意类型为key
- Map是有序结构(重要)
- Map操作同样很快
// object // const obj = { // name: '张三', // title: 'Author' // } // 只能以字符串为key,且是无序格式 // map Api const m = new Map([ ['name', '张三'], ['title', 'Author'] ]) m.set('age', 30) m.delete('title') m.has('name') m.size m.forEach(val => console.log(val)) // ... // 以任意类型为key const o = { p: 'Hello World' } m.set(o, 'object key') const fn = () {} m.set(fn, 'fn key') const obj1 = { name: '小红' } const obj2 = { name: '小明' } m.set(obj1, obj2) // 关联,但没有引用关系,保持独立 // Map是有序的并且还很快,object是无序的 const targetObj = {} const targetMap = new Map() for (let i = 0; i < 10000000; i++) { targetObj[i + ''] = i targetMap.set(i + '', i) } console.time('targetObj find') targetObj['5000000'] console.timeEnd('targetObj find') console.time('targetObj delete') delete targetObj['5000000'] console.timeEnd('targetObj delete') console.time('targetMap find') targetMap.has('5000000') console.timeEnd('targetMap find') console.time('targetMap delete') targetMap.delete('5000000') console.timeEnd('targetMap delete') // targetObj find: 0.009033203125 ms // targetObj delete: 0.0029296875 ms // targetMap find: 0.007080078125 ms // targetMap delete: 0.001953125 ms // Map有序与obj无序执行速度相差不多