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

ada*_*Lev 8 javascript optimization performance

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

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

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

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

gbl*_*zex 6

他们不一样.

  • obj.prop将检查属性是否不falsy(不null,undefined,0,"",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
Run Code Online (Sandbox Code Playgroud)

我认为只要你不是一次做数百万次检查,性能就不应该成为问题.如果你真的想要最快的方式,你可以使用:

if ( obj.prop != null )
Run Code Online (Sandbox Code Playgroud)

哪个检查财产是否是nullundefined.在这种形式中,其他虚假的价值喜欢""0不能干涉,你仍然是超级高效的.