JavaScript对象中键查找的性能

Sah*_*wal 51 javascript hash dictionary

我刚刚读到这个问题:是否有像python这样的javascript中的字典?

其中一个答案表示您可以使用Python字典之类的JavaScript对象.真的吗?对象中键查找的性能如何?是O(1)?是否为对象添加一个键也是恒定时间(散列)?

Dom*_*nic 56

V8设计文档暗示查询将至少这快,如果不是更快:

大多数JavaScript引擎使用类似字典的数据结构作为对象属性的存储 - 每个属性访问都需要动态查找来解析属性在内存中的位置.这种方法使得访问JavaScript的属性通常比访问Java和Smalltalk等编程语言中的实例变量要慢得多.在这些语言中,由于对象类定义的固定对象布局,实例变量位于由编译器确定的固定偏移处.访问只是内存加载或存储的问题,通常只需要一条指令.

为了减少访问JavaScript属性所需的时间,V8不使用动态查找来访问属性.相反,V8在幕后动态创建隐藏类.[...] 在V8中,当添加新属性时,对象会更改其隐藏类.

听起来,由于隐藏的类创建,添加新密钥可能会稍慢一些.


Pet*_*ter 19

是的,您可以假设添加密钥,以及稍后将其用于访问是有效的恒定时间操作.

在引擎盖下,JS引擎可以应用一些技术来优化后续查找,但是出于任何算法的目的,您可以假设O(1).

  • 与 `var first = new Map([ [1, 'one'], [2, 'two'], [3, ' Three'], ]);` 相比 `var secondary={'1'' 的效率如何:一,'2':二,'3':'三'}`? (2认同)

Val*_*kov 7

看一下类似的问题JavaScript VM 如何实现对象属性访问?以及答案。这里我描述了JS引擎使用的优化技术以及它如何影响关键查找性能。我希望这些细节可以帮助您编写更高效的 JS 代码。