在JavaScript中,使用Map与Object相比有什么缺点吗?

8
在使用哈希表时,相较于ES6的Map(),使用对象有什么明显的好处吗?我喜欢使用它的forEach函数。但如果需要哈希表,选择Map()是不是不好的做法?
2个回答

5
在Javascript中,ObjectMap的比较更多地是关于是否要选择通用工具还是专用工具的问题。 Map实际上只是一种特殊类型的对象(就像您在应用程序中构造的任何其他类型的对象一样)。您甚至可以创建自己的Map()构造函数来模仿ES6 Maps。像其他对象一样,它有访问其功能的方法。 Map的“特殊之处”在于它是一个高效的键值存储。
另一方面,Object是Javascript的一种原生数据类型,可用于各种目的(其中之一就是Map)。它没有为任何一个目的而“专门化”。
因此,总结如下:
- 如果您将使用Map作为高效的哈希表,请放心使用!那是它的用途。 - 如果您将使用Map进行除键值存储之外的任何操作(或者,正如您所说,仅仅是因为forEach方法),则需要重新考虑使用更合适的数据结构(这可能是一个普通的旧对象也可能不是)。

2
...反之亦然 - 如果你正在使用对象作为哈希表,请停止这样做! - georg

0

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

总结一下:

  • Map具有有用的属性、实用函数和可迭代性,与使用Object相比可以节省一些代码(例如在尝试查找键值对数量时)
  • Map在密集的键值操作(添加、删除)中可能会更快
  • Map可以防止键与预定义对象原型属性之间的意外冲突
  • Map可以使用对象作为键

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接