我很好奇检查JS对象(用作字典)是否具有给定属性的最快方法。
我对结果感到困惑。亲眼看看:http://jsperf.com/object-membership-check-speed/6
在Chrome中,in
关键字方法比点语法慢96%。
在Firefox中,它也慢了约80%。 IE显示慢了约50%
到底是什么?难道我做错了什么? 我想象“in”关键字会被优化,因为它甚至不需要获取值,它只返回一个布尔值。但显然我是完全错的。
答案 0 :(得分:6)
他们不一样。
obj.prop
会检查某个属性不是虚假(不是null
,undefined
,0
,{{1} },""
)。
false
检查对象(包括其原型链)中的属性是否存在
最后你有prop in obj
检查对象是否有obj.hasOwnProperty('prop')
,因为它的拥有属性(不能是固有的)。
实施例
prop
我认为只要你一次不做数百万次检查,性能就不应该成为问题。如果你真的想要最快的方式,你可以使用:
var obj = { prop: "" };
obj.prototype = { inhereted: true };
if ( obj.prop ); // false
if ( prop in object ); // true
if ( inhereted in object ); // true
if ( obj.hasOwnProperty('prop') ); // true
if ( obj.hasOwnProperty('inhereted') ); // false
检查该属性是否为if ( obj.prop != null )
或null
。在这种形式中,undefined
或""
等其他虚假值不会干扰,您仍然具有超高性能。