Map继承自Object
| key | 元素顺序 | 新建 | 访问元素 | 检测元素是否存在 | 新增 | 删除 | length | Iterating | |
|---|---|---|---|---|---|---|---|---|---|
| Object | 只能为基本数据类型 (string, symbol等) | 无 | var obj = {...} var obj = new Object() var obj = Object.create(null) | obj.id obj['id'] | 'id' in obj | obj['key'] = value obj.key = value | delete obj.id | Object.keys().length | Object不支持 |
| 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 的类型的情况。