# object和map有什么区别?
推荐阅读《我应该使用 Object 还是 Map?》 (opens new window)
(1)用法对比
- key类型:对于 Object 而言,它键(key)的类型只能是字符串,数字或者 Symbol;而对于 Map 而言,它可以是任何类型。(包括 Date,Map,或者自定义对象)
- 排列顺序:Map 中的元素会保持其插入时的顺序;而 Object 则不会完全保持插入时的顺序,而是遵循一定的规则
- 是否可迭代:Map 是可迭代对象,所以其中的键值对是可以通过 for of 循环或 .foreach() 方法来迭代的;而普通的对象键值对则默认是不可迭代的,只能通过 for in 循环来访问
(2)句法对比
- 创建写法:对于 Object 来说,我们在绝大多数情况下都会选择对象字面量
const o = {}
,而map创建则通常只会使用其构造函数const m = new Map()
- 新增/读取/删除元素的写法不同
(3)性能对比
- 空的 Object 会比空的 Map 占用更少的内
- 在拥有一定数量的元素时, Object 会比 Map 占用多占用内存。在需要进行很多新增操作,且需要储存许多数据的时候,使用 Map 会更高效。
总结了一下使用 Map 和 Object 更为合适的时机
【使用 Map】
- 储存的键不是字符串/数字/或者 Symbol 时,选择 Map,因为 Object 并不支持
- 储存大量的数据时,选择 Map,因为它占用的内存更小
- 需要进行许多新增/删除元素的操作时,选择 Map,因为速度更快
- 需要保持插入时的顺序的话,选择 Map,因为 Object 会改变排序
- 需要迭代/遍历的话,选择 Map,因为它默认是可迭代对象,迭代更为便捷
【使用 Object】
- 只是简单的数据结构时,选择 Object,因为它在数据少的时候占用内存更少,且新建时更为高效
- 需要用到 JSON 进行文件传输时,选择 Object,因为 JSON 不默认支持 Map
- 需要对多个键值进行运算时,选择 Object,因为句法更为简洁
- 需要覆盖原型上的键时,选择 Object