JavaScript中的Map vs Object

JavaScript中的Map vs Object

我刚刚发现了chromestatus.com,在我失去了几个小时之后,发现了这个功能条目

地图:地图对象是简单的键/值映射。

那让我困惑。常规的JavaScript对象是字典,所以Map与字典有什么不同?从概念上讲,它们是相同的

文档chromestatus引用也没有帮助:

映射对象是键/值对的集合,其中键和值都可以是任意ECMAScript语言值。不同的键值只能出现在Map集合中的一个键/值对中。使用在创建Map时选择的比较算法区分不同的键值。

Map对象可以按插入顺序迭代其元素。必须使用散列表或其他机制来实现Map对象,这些机制平均提供对集合中元素数量的次线性访问时间。此Map对象规范中使用的数据结构仅用于描述Map对象所需的可观察语义。它不是一个可行的实施模型。

...对我来说仍然听起来像是一个对象,显然我错过了一些东西。

为什么JavaScript获得(受到良好支持的)Map对象?它有什么作用?


翻过高山走不出你
浏览 705回答 3
3回答

慕斯王

对象可以像字典一样运行,因为Javascript是动态类型的,但实际上并不是这样。新Map()功能更好,因为它具有常规get/set/has/delete方法,接受键的任何类型而不仅仅是字符串,在迭代时更容易使用,并且它没有原型和其他属性出现的边缘情况。它也非常快,随着引擎变得越来越快而越来越快。99%的时间你应该只使用一个Map()。但是,如果您只使用基于字符串的键并且需要最大的读取性能,那么对象可能是更好的选择。细节是(几乎所有)javascript引擎在后台将对象编译为C ++类。这些类型由其“大纲”缓存和重用,因此当您创建具有相同确切属性的新对象时,引擎将重用现有的背景类。这些类的属性的访问路径非常优化,并且比查找a的速度快得多Map()。添加或删除属性会导致重新编译缓存的支持类,这就是为什么将对象用作具有大量键添加和删除的字典的原因非常慢,但是在不更改对象的情况下读取和分配现有键非常快。因此,如果您使用字符串键进行一次写入读取繁重的工作负载,那么请将其object用作专用的高性能字典,但对于其他所有字典,请使用Map()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript