0
点赞
收藏
分享

微信扫一扫

javascript中map是否有序?

蚁族的乐土 2022-04-03 阅读 76
java后端

转自: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使用。不过MapsObjects有一些重要的区别,在下列情况里使用Map会是更好的选择:

  • 一个Object的键只能是[这里是代码015]或者[这里是代码016],但一个Map的键可以是任意值,包括函数、对象、基本类型。
  • Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。
  • 你可以通过size属性直接获取一个Map的键值对个数,而Object的键值对个数只能手动计算。
  • Map可直接进行迭代,而Object的迭代需要先获取它的键数组,然后再进行迭代。
  • Object都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。虽然 ES5 开始可以用map = Object.create(null)来创建一个没有原型的对象,但是这种用法不太常见。
  • Map在涉及频繁增删键值对的场景下会有些性能优势。
举报

相关推荐

0 条评论