在 Javascript 中使用 Map over Object 有什么缺点吗?

Is there any disadvantage of using Map over Object in Javascript?

与 ES6 Map() 相比,使用 Object 有什么明显的好处吗?我喜欢将它用于 forEach 函数。在需要哈希表时选择 Map() 是一种不好的做法吗?

在 Javascript 的上下文中 ObjectMap 的情况更像是一个问题,即您是想要通用工具还是专用工具来完成这项工作。

Map 实际上只是一种特殊的对象(就像您将在应用程序中构造的任何其他类型的对象一样。您甚至可以制作自己的 Map() 构造函数来模仿 ES6地图)。与其他对象一样,它具有访问其功能的方法。 Map 的 "specialty" 是一个高效的 key-value 商店。

另一方面,Object 是 Javascript 的原生数据类型之一,可用于多种用途(Map 就是其中之一)。它不是 "specialized" 用于任何一个目的。

所以,总而言之:

  • 如果您使用 Map 作为有效的散列 table,那就去吧 !这就是它的用途。
  • 如果您将 Map 用于除键值存储以外的任何其他用途(或者,如您所说,只是 因为 forEach 方法)您可能不得不重新考虑使用它以支持更 suitable 数据结构(它可能是也可能不是普通的旧对象)

MDN 上有一个很好的解释,说明什么时候以及为什么更喜欢 Map 而不是 Object

总结一下:

  • Map 具有有用的属性、实用函数并且是可迭代的,这 与使用 Object 相比,可以节省一些写作时间(比如在尝试查找 key-value 对的数量时)
  • Map 在密集的 key-value 操作(添加、删除)中可以更高效
  • Map 可防止您的键与预定义对象的原型属性之间发生不必要的冲突
  • Map 可以使用对象作为键