在使用哈希表时,相较于ES6的
Map()
,使用对象有什么明显的好处吗?我喜欢使用它的forEach
函数。但如果需要哈希表,选择Map()
是不是不好的做法?Map()
,使用对象有什么明显的好处吗?我喜欢使用它的forEach
函数。但如果需要哈希表,选择Map()
是不是不好的做法?Object
和Map
的比较更多地是关于是否要选择通用工具还是专用工具的问题。
Map
实际上只是一种特殊类型的对象(就像您在应用程序中构造的任何其他类型的对象一样)。您甚至可以创建自己的Map()
构造函数来模仿ES6 Maps。像其他对象一样,它有访问其功能的方法。 Map
的“特殊之处”在于它是一个高效的键值存储。Object
是Javascript的一种原生数据类型,可用于各种目的(其中之一就是Map
)。它没有为任何一个目的而“专门化”。Map
作为高效的哈希表,请放心使用!那是它的用途。
- 如果您将使用Map
进行除键值存储之外的任何操作(或者,正如您所说,仅仅是因为forEach
方法),则需要重新考虑使用更合适的数据结构(这可能是一个普通的旧对象也可能不是)。在MDN上有一个很好的解释,说明何时以及为什么更喜欢使用Map
而不是Object
。
总结一下:
Map
具有有用的属性、实用函数和可迭代性,与使用Object
相比可以节省一些代码(例如在尝试查找键值对数量时)Map
在密集的键值操作(添加、删除)中可能会更快Map
可以防止键与预定义对象原型属性之间的意外冲突Map
可以使用对象作为键