“in”运算符或obj.hasOwnProperty(prop)的Big O表示法的效率是多少

时间:2011-05-16 00:31:26

标签: javascript performance big-o

Mozilla的网站清楚地描述了hasOwnProperty()in运营商。

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

我怀疑它们是O(1)(恒定时间),但很想看到可能存在的任何引用或测试。

3 个答案:

答案 0 :(得分:7)

将我的评论转化为答案。

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

in肯定会更复杂(但如果该属性存在于该对象上,则应与hasOwnProperty()相同),因为它在原型链中向上寻找该属性。这就是为什么在使用hasOwnProperty()迭代对象属性时经常建议使用for ( in )

要查明,请检查这些功能的源代码。使用来源,卢克:)

答案 1 :(得分:4)

我的理论是in应该比hasOwnProperty()更快。 inhasProperty()的代理(根据标准:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf - 请参阅第79页),这是一种在整个语言中广泛使用的内部函数(并且会隐式地进行高度优化) 。实际上,测试显示平均in更快。

链接:http://jsfiddle.net/VhhzR/2/

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

希望这有用:)

答案 2 :(得分:0)

我不认为它与对象属性查找机制有任何不同,因为它们实际上是相同的,差异是hasOwnProperty(prop)仅查看对象本身,而o.prop将会失效原型层次结构。