【问题标题】:What is the difference between a dictionary and a Map in Javascript 6? [duplicate]Javascript 6中的字典和地图有什么区别? [复制]
【发布时间】:2016-02-17 00:40:14
【问题描述】:

地图与字典/对象有何不同?

也就是说let x = {}let x = new Map()有什么区别?

【问题讨论】:

  • "Map 对象是一个简单的键/值映射。任何值(对象和原始值)都可以用作键或值。" -- developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • Mozilla 的那个页面也有一个“对象和地图比较”部分。
  • 最大的区别是Map可以使用任何值作为键(例如另一个对象),而使用{}需要一个字符串作为键。事实上,一个 Map 可以包含带有 "1"1 键的单独项目,但普通对象不能。当然,Map 对象具有适用于 Map 对象的内置方法,而 {} 没有。
  • 要记住的另一件事:地图实例也是一个对象,并且可以像任何其他对象一样具有属性等。例如,您可以创建一个 Map 实例并为对象命名函数方法。
  • 我不明白对 MDN 的不断引用。 language specification 非常清楚(至少在这一点上),如果作为最终参考,它会带来好处。

标签: javascript ecmascript-6


【解决方案1】:

Objects and maps compared(来自 MDN):

Objects 与 Maps 类似,都可以让您将键设置为值, 检索这些值,删除键,并检测是否存在 存储在一个键上。因此(并且因为没有内置 替代方案),对象在历史上一直被用作地图;然而, 对象和地图之间存在重要的区别 更好地使用地图:

  • 一个对象有一个原型,所以映射中有默认键。 这可以通过使用 map = Object.create(null) 从 ES5 开始绕过, 但很少这样做。
  • 对象的键是字符串和符号,它们可以在 Map 的任何值。
  • 您可以轻松获得地图的大小,而您必须手动 跟踪对象的大小。

这并不意味着你应该在任何地方都使用地图,对象仍然是 大多数情况下使用。地图实例仅对集合有用,并且 你应该考虑在你以前使用过的地方调整你的代码 这样的对象。对象应用作记录,具有字段和 方法。如果您仍然不确定要使用哪一个,请问问自己 以下问题:

  • 密钥在运行时通常是未知的,您是否需要动态查找它们?
  • 是否所有值都具有相同的类型,并且可以互换使用?
  • 您需要不是字符串的键吗?
  • 是否经常添加或删除键值对?
  • 您是否有任意数量(易于更改)的键值对?
  • 集合是否迭代?

这些都是你想要一个集合的地图的迹象。如果在 相比之下,您有固定数量的键,对它们进行操作 分别,并区分它们的用法,那么你想要一个 对象。

【讨论】:

  • 另一件可能非常重要的事情是地图内容被JSON.stringify()忽略了
  • 请确保将您对我的 MDN 文本的引用格式化为引用 :-)
猜你喜欢
  • 2011-02-22
  • 2020-09-28
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2018-06-03
  • 2019-01-17
相关资源
最近更新 更多