答案 0 :(得分:7)
将我的评论转化为答案。
hasOwnProperty()
应为O(1)
,因为它是一个关键查找,但它将是特定于实现的。
in
肯定会更复杂(但如果该属性存在于该对象上,则应与hasOwnProperty()
相同),因为它在原型链中向上寻找该属性。这就是为什么在使用hasOwnProperty()
迭代对象属性时经常建议使用for ( in )
。
要查明,请检查这些功能的源代码。使用来源,卢克:)
答案 1 :(得分:4)
我的理论是in
应该比hasOwnProperty()
更快。 in
是hasProperty()
的代理(根据标准: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
将会失效原型层次结构。