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中的children和childNodes有啥区别?
JavaScript 中的 != 和 !== 运算符有啥区别?