转自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
描述节
一个Map对象在迭代时会根据对象中元素的插入顺序来进行— 一个 [这里是代码001]循环在每次迭代后会返回一个形式为[key,value]的数组。
键的相等(Key equality)节
键的比较是基于"SameValueZero" 算法:NaN是与NaN相等的(虽然NaN !== NaN),剩下所有其它的值是根据===运算符的结果判断是否相等。在目前的ECMAScript规范中,-0和+0被认为是相等的,尽管这在早期的草案中并不是这样。有关详细信息,请参阅浏览器兼容性表中的“Value equality for -0 and 0”。
Objects 和 maps 的比较节
[这里是代码008]和Maps类似的是,它们都允许你按键存取一个值、删除键、检测一个键是否绑定了值。因此(并且也没有其他内建的替代方式了)过去我们一直都把对象当成Maps使用。不过Maps和Objects有一些重要的区别,在下列情况里使用Map会是更好的选择:
- 一个
Object的键只能是[这里是代码015]或者[这里是代码016],但一个Map的键可以是任意值,包括函数、对象、基本类型。 - Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。
- 你可以通过
size属性直接获取一个Map的键值对个数,而Object的键值对个数只能手动计算。 Map可直接进行迭代,而Object的迭代需要先获取它的键数组,然后再进行迭代。Object都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。虽然 ES5 开始可以用map = Object.create(null)来创建一个没有原型的对象,但是这种用法不太常见。Map在涉及频繁增删键值对的场景下会有些性能优势。









