我刚读了这个问题:are there dictionaries in javascript like python?性能在JavaScript键查找对象
答案之一说,你可以使用JavaScript对象,如Python字典。真的吗?对象中的关键查找的性能如何?是O(1)吗?是否还将常量时间(哈希)添加到对象的键?
我刚读了这个问题:are there dictionaries in javascript like python?性能在JavaScript键查找对象
答案之一说,你可以使用JavaScript对象,如Python字典。真的吗?对象中的关键查找的性能如何?是O(1)吗?是否还将常量时间(哈希)添加到对象的键?
的V8 design docs暗示查询将至少这快,如果不是更快:
大多数JavaScript引擎使用类似字典的数据结构 存储为对象属性 - 每个属性访问需要一个 动态查找来解析属性在内存中的位置。这种 方法使得访问JavaScript中的属性通常比访问诸如 Java和Smalltalk之类的编程语言中的实例变量要慢很多 。在这些语言中,实例变量位于由编译器确定的固定偏移量处的 ,这是由于对象的类定义了固定对象 布局。访问只是简单的内存加载或存储,通常只需要一条指令。
为了减少访问JavaScript属性所需的时间,V8确实不使用动态查找来访问属性。相反,动态V8动态 在幕后创建隐藏类。 [...] 在V8中,当添加新属性时,对象将更改其隐藏类 。
听起来像增加一个新的密钥可能会稍微慢一点,但是,由于隐藏的类创建。
是的,您可以假设添加一个密钥,并随后使用它进行访问有效地是恒定时间操作。在引擎盖下,JS引擎可能会应用一些技术来优化后续查找,但出于任何算法的目的,您可以假设O(1)。
谢谢Domenic!所以对于我来说使用Object查找作为字典查找似乎是安全的,如果我正在做更多的查找而不是哈希。 –
对于V8,动态查找是不是同时用于点表示法和方括号表示法? –