JavaScript对象中关键查找的性能

我刚刚阅读这个问题: 是否有像JavaScript的JavaScript字典?

其中一个答案是,你可以使用Python对象等JavaScript对象。 真的吗? 对象中的关键字查询的性能如何? 是O(1)吗? 是恒定时间(哈希)添加一个关键的对象?

V8devise文档意味着查找速度至less是这么快,即使不是更快:

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

为了减less访问JavaScript属性所需的时间,V8不使用dynamic查找来访问属性。 相反,V8dynamic地在幕后创build隐藏的类。 在V8中,一个对象在添加新属性时会更改其隐藏类。

这听起来像添加一个新的密钥可能会稍微慢一些,因为隐藏的类创build。

是的,你可以假设添加一个密钥,然后使用它来访问实际上是恒定的时间操作。

在引擎盖下,JS引擎可能会应用一些技术来优化后续的查找,但对于任何algorithm的目的,您可以假设O(1)。