ES6标准的一个新功能是Map类,用于创建关键:数据的值集合。好的,对。但是,为什么Javascript需要这样的类?使用JS对象表示法还不够,这实际上也是一个关键:数据的值集合?那么,有什么区别?
答案 0 :(得分:4)
来自MDN:
比较对象和地图
对象类似于Maps,它们都允许您将键设置为值,检索这些值,删除键以及检测某些键是否存储在键中。正因为如此(并且因为没有内置替代品),所以对象在历史上被用作地图;但是,对象和地图之间存在重要差异,这使得使用地图更好:
- 对象有一个原型,因此地图中有默认键。从ES5开始,使用
map = Object.create(null)
可以绕过这种情况,但很少这样做。- 对象的键是字符串和符号,它们可以是地图的任何值。
- 您可以轻松获取地图的大小,同时必须手动跟踪对象的大小。
这并不意味着您应该随处使用地图,在大多数情况下仍会使用对象。地图实例仅对集合有用,您应该考虑调整您以前使用过的对象的代码。对象应用作记录,包括字段和方法。 如果您仍然不确定要使用哪一个,请问自己以下问题:
- 在运行之前,密钥通常是未知的,您是否需要动态查找它们?
- 是否所有值都具有相同的类型,并且可以互换使用?
- 您是否需要不是字符串的键?
- 是否经常添加或删除键值对?
- 您是否有任意(容易变化)的键值对?
- 集合是否已迭代?
这些都是你想要一个集合的地图的迹象。如果相反,你有一个固定数量的键,单独操作它们,并区分它们的用法,那么你想要一个对象。
就我个人而言,最重要的是支持任何类型的值,而不仅仅是字符串。