Javascript 什么';用“s”的大O符号表示效率;在;操作员或对象hasOwnProperty(prop)

Javascript 什么';用“s”的大O符号表示效率;在;操作员或对象hasOwnProperty(prop),javascript,performance,big-o,Javascript,Performance,Big O,Mozilla的网站清楚地描述了运营商 但是,它没有提供任何关于其效率的实施细节 我想他们可能是O(1)(常数时间),但希望看到可能存在的任何引用或测试。我不认为这与对象属性查找机制有任何不同,因为它们实际上做的是相同的事情,不同之处在于hasOwnProperty(prop)只查找对象本身,而o.prop将进入原型层次结构。将我的评论转化为答案 hasOwnProperty()应该是O(1),因为它是一个键查找,但它将是特定于实现的 中的肯定会更复杂(不过如果该对象上存在属性,则应该与hasO

Mozilla的网站清楚地描述了运营商

但是,它没有提供任何关于其效率的实施细节


我想他们可能是
O(1)
(常数时间),但希望看到可能存在的任何引用或测试。

我不认为这与对象属性查找机制有任何不同,因为它们实际上做的是相同的事情,不同之处在于
hasOwnProperty(prop)
只查找对象本身,而
o.prop
将进入原型层次结构。

将我的评论转化为答案

hasOwnProperty()
应该是
O(1)
,因为它是一个键查找,但它将是特定于实现的

中的
肯定会更复杂(不过如果该对象上存在属性,则应该与
hasOwnProperty()
相同),因为它会沿着原型链向上查找该属性。这就是为什么在使用
for(in)
对对象属性进行迭代时,通常建议使用
hasOwnProperty()


要找到答案,请检查这些函数的源代码。使用源代码,Luke:)

我的理论是,
中的
应该比
hasOwnProperty()快<
中的code>是
hasProperty()
的代理(根据标准:--请参见第79页),这是一个在整个语言中广泛使用的内部函数(并将隐式进行高度优化)。事实上,测试表明,平均而言,
中的
速度更快

链接:

在Firefox中,
中的
速度明显更快。在Chrome中,
中的
只在处理复杂对象时更快(这令人费解)。在Internet Explorer中,
中的
再次领先


希望这是有帮助的:)

我认为这是一个hashmap,所以它应该是
O(1)
。使用某种hash是有意义的,因为根据定义属性应该是唯一的,但是最好检查一些引用,特别是IE如何实现它们。我想这可能是依赖于实现的。我会打开你最喜欢的开源实现的源代码。谢谢你的回答。实际上,他并没有试图比较这两个元素,而是在研究这两个元素的细节。“in”仍然是O(1),因为在一组n个元素中,查找其中1个元素的时间并不依赖于其余的n个元素,而且在检查源代码时仍然是一个非常好的建议,但如果有人已经遇到它,我只是想抄近路:)。谢谢。@haknick我想你已经回答了你自己的问题:)hashmap还取决于散列函数的类型以及它发生冲突的频率。如果有很多碰撞,根据碰撞的严重程度,最终的结果可能是O(log(n))到O(n)。当然,这还取决于索引的大小以及重新索引的频率(即从32到64的索引)。