Javascript:字典/对象成员资格检查速度

时间:2010-10-27 16:05:55

标签: javascript performance optimization

我很好奇检查JS对象(用作字典)是否具有给定属性的最快方法。

我对结果感到困惑。亲眼看看:http://jsperf.com/object-membership-check-speed/6

在Chrome中,in关键字方法比点语法慢96%。 在Firefox中,它也慢了约80%。 IE显示慢了约50%

到底是什么?难道我做错了什么? 我想象“in”关键字会被优化,因为它甚至不需要获取值,它只返回一个布尔值。但显然我是完全错的。

1 个答案:

答案 0 :(得分:6)

他们不一样

  • obj.prop会检查某个属性不是虚假(不是nullundefined0,{{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""等其他虚假值不会干扰,您仍然具有超高性能。