什么是 Map:
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
语法:
new Map([iterable])
objects 和 maps 的区别:
Object 和 Map 类似的一点是, 它们都允许你按键存取一个值, 都可以删除键, 还可以检测一个键是否绑定了值. 因此, 一直以来, 我们都把对象当成 Map 来使用, 不过, 现在有了 Map, 下面的区别解释了为什么使用 Map 更好点.
纠错
一个对象通常都有自己的原型, 所以一个对象总有一个 ”prototype” 键。
不过,从 ES5 开始可以使用 map = Object.create(null)来创建一个没有原型的对象。
一个对象的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
你可以通过 size 属性很容易地得到一个 Map 的键值对个数,而对象的键值对个数只能手动确认。
但是这并不意味着你可以随意使用 Map,对象仍旧是最常用的。
如果你不确定要使用哪个,请思考下面的问题:
在运行之前 key 是否是未知的,是否需要动态地查询 key 呢?
是否所有的值都是统一类型,这些值可以互换么?
是否需要不是字符串类型的 key?
键值对经常增加或者删除么?
是否有任意个且非常容易改变的键值对?
这个集合可以遍历么?
假如以上全是“是”的话,那么你需要用 Map 来保存这个集。相反,你有固定数目的键值对,独立操作它们,区分它们的用法,那么你需要的是对象。