浅析javascript中Map和Object的区别

453 阅读1分钟

Map继承自Object

key元素顺序新建访问元素检测元素是否存在新增删除lengthIterating
Object只能为基本数据类型
(string, symbol等)
var obj = {...}
var obj = new Object()
var obj = Object.create(null)
obj.id
obj['id']
'id' in objobj['key'] = value
obj.key = value
delete obj.idObject.keys().lengthObject不支持
Map可以为任意数据类型元素插入顺序var map = new Map([1, 2], [2, 3])map.get(1)map.has(1)map.set(key, value)map.delete(1)
// 全部删除map.clear()
Map.size()Map 自身支持迭代

什么时候适合使用Object?什么时候适合使用Map? 虽然Map 在很多时候优于 Object,但是作为 JavaScript 最基础的数据类型,还是有很多情景更适合使用 Object。

  • 当所要存储的是简单数据类型,并且 key 都为字符串或者整数或者 Symbol 的时候,优先使用 Object ,因为Object可以使用 字符变量 的方式创建,更加高效。

  • 当需要在单独的逻辑中访问属性或者元素的时候,应该使用 Object;

  • JSON 直接支持 Object,但不支持 Map

  • Map 是纯粹的 hash, 而 Object 还存在一些其他内在逻辑,所以在执行 delete 的时候 会有性能问题。所以写入删除密集的情况应该使用 Map。

  • Map 会按照插入顺序保持元素的顺序,而Object做不到。

  • Map 在存储大量元素的时候性能表现更好,特别是在代码执行时不能确定 key 的类型的情况。