Mozilla的网站清楚地描述了
hasOwnProperty()
和in
运算符。但是,在它们的效率方面,它并没有给出任何实现细节。我会怀疑它们是O(1)
(常数时间),但很想看到任何可能存在的参考或测试。hasOwnProperty()
和in
运算符。但是,在它们的效率方面,它并没有给出任何实现细节。我会怀疑它们是O(1)
(常数时间),但很想看到任何可能存在的参考或测试。将我的评论转化为答案。
hasOwnProperty()
应该是 O(1)
,因为它是一个键查找,但具体实现可能不同。
in
会更加复杂(如果属性存在于该对象上,则应该与 hasOwnProperty()
相同),因为它沿着原型链向上查找该属性。这就是为什么在使用 for (in)
迭代对象属性时通常建议使用 hasOwnProperty()
。
要了解详情,请检查这些函数的源代码。使用源代码,卢克 :)
in
应该比hasOwnProperty()
更快。 根据标准,in
其实是代理了hasProperty()
函数(参见第79页:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf),它是一种在整个语言中广泛使用的内部函数(因此可能被隐式地高度优化)。实际上,测试表明in
平均速度更快。in
明显更快。在Chrome浏览器中,只有在处理复杂对象时in
才更快(这令人困惑)。在Internet Explorer浏览器中,in
再次领先。我认为它与对象属性查找机制没有什么不同,因为它们实际上执行相同的操作,区别在于hasOwnProperty(prop)
只查找对象本身,而o.prop
会沿着原型层次结构向下查找。
O(1)
。 - alex