Javascript 6中的字典和地图有啥区别? [复制]

Posted

技术标签:

【中文标题】Javascript 6中的字典和地图有啥区别? [复制]【英文标题】: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 非常清楚(至少在这一点上),如果作为最终参考,它会带来好处。 【参考方案1】:

Objects and maps compared(来自 MDN):

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

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

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

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

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

【讨论】:

另一件可能非常重要的事情是地图内容被JSON.stringify()忽略了 请确保将您对我的 MDN 文本的引用格式化为引用 :-)

以上是关于Javascript 6中的字典和地图有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Javascript中的对象和地图对象有啥区别? [复制]

JavaScript中的children和childNodes有啥区别?

JavaScript 中的 != 和 !== 运算符有啥区别?

JavaScript 中的窗口、屏幕和文档有啥区别?

javascript中的`offsetLeft`和'clientLeft'有啥区别

Javascript中的错误和异常有啥区别?