JavaScript对象中键查找的性能

JavaScript对象中键查找的性能,javascript,dictionary,hash,Javascript,Dictionary,Hash,我刚刚读到这个问题: 其中一个答案是可以使用JavaScript对象,比如Python字典。这是真的吗?对象中键查找的性能如何?是O(1)吗?向对象添加键是否也是常数时间(散列)?暗示查找至少会这么快,如果不是更快的话: 大多数JavaScript引擎使用类似字典的数据结构作为 对象属性的存储-每个属性访问都需要一个 动态查找以解析属性在内存中的位置。这 这种方法使得访问JavaScript中的属性通常非常容易 比在编程语言中访问实例变量慢,如 Java和Smalltalk。在这些语言中,实例变

我刚刚读到这个问题:

其中一个答案是可以使用JavaScript对象,比如Python字典。这是真的吗?对象中键查找的性能如何?是O(1)吗?向对象添加键是否也是常数时间(散列)?

暗示查找至少会这么快,如果不是更快的话:

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

为了减少访问JavaScript属性所需的时间,V8 不使用动态查找来访问属性。相反,V8是动态的 在幕后创建隐藏类。[…]在V8中,对象会发生变化 添加新属性时隐藏的类。


但是,由于隐藏类的创建,添加新密钥的速度可能会稍微慢一些。

是的,您可以假设添加密钥以及以后使用它进行访问实际上是固定时间操作


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

看看类似的问题和。这里我描述了JS引擎使用的优化技术,以及它如何影响密钥查找性能。我希望这些细节能帮助您编写更高效的JS代码。

谢谢!因此,如果我做的查找比散列多,那么使用对象查找作为字典查找似乎是安全的。对于V8,动态查找不同时用于点表示法和方括号表示法是真的吗?与
var first=newmap([[1,'one'],[2,'two'],[3,'three'],])比较var second={'1':1,'2':2,'3':'3'的效率有多高}