在JavaScript中,有没有使用双等号(==
)与用三等于(===
)之间的性能差异?
例如:if (foo == bar)
VS if (foo === bar)
严格比较(===
)总是会稍快一些,但the difference is usually negligible。
这肯定是有道理的喜欢===
如果你肯定知道你并不需要强制类型转换的比较。这将永远是至少一样快==
。
==
因为你得到的结果可能是意想不到的。编辑:供参考这里由阿克塞尔博士Rauschmayer先生真的http://www.2ality.com/2011/06/javascript-equality.html很大写了规范的解释是的。
===
(全等):仅认为具有相同的类型值相等。
==
(宽松平等)
在所有现代JavaScript环境得到实施完全不同的。简单地说,通过给定的转换变量分为原语(字符串,数字,布尔值)为==
alikeness测试。 ===
试验严格同一性,这意味着完全相同的对象或无需转换原始值。
如果你objOne == objTwo
实际发生的事情是[[EQUALS]].call(objOne.valueOf(), objTwo.valueOf())
的valueOf的分辨率可以在一定程度上参与,在JS和内部发动机东西暴露功能之间弹跳。我只想说,比较将始终与裹挟到原始的或者错误将被抛出两个值结束。
编辑:EQUALS
实际上是尝试STRICT_EQUALS
其中第一个抢占过程的其余部分。
这里有趣的一点是,的valueOf(及其合作伙伴的toString)是重写。运行这段代码在Chrome(我觉得任何的webkit,如果JSC和V8分享这珍闻不知道)。它会打击你的mindpiece:
var actions = [];
var overload = {
valueOf: function(){
var caller = arguments.callee.caller;
actions.push({
operation: caller.name,
left: caller.arguments[0] === this ? "unknown" : this,
right: caller.arguments[0]
});
return Object.prototype.toString.call(this);
}
};
overload.toString = overload.valueOf;
overload == 10;
overload === 10;
overload * 10;
10 / overload;
overload in window;
-overload;
+overload;
overload < 5;
overload > 5;
[][overload];
overload == overload;
console.log(actions);
输出:
[ { operation: 'EQUALS',
left: overload,
right: 10 },
{ operation: 'MUL',
left: overload,
right: 10 },
{ operation: 'DIV',
left: 'unknown',
right: overload },
{ operation: 'IN',
left: overload,
right: DOMWindow },
{ operation: 'UNARY_MINUS',
left: overload,
right: undefined },
{ operation: 'TO_NUMBER',
left: overload,
right: undefined },
{ operation: 'COMPARE',
left: overload,
right: 5 },
{ operation: 'COMPARE',
left: 'unknown',
right: overload },
{ operation: 'ToString',
left: 'unknown',
right: overload } ]
==
和===
之间的差的本质是通过===
没有出现在该列表中示出了。它跳过旅程JavascriptLand完全。比较性能时冒险是昂贵的。
然而,你需要考虑发动机的优化。对于大多数对象,引擎就能切出大部分的步骤,并留在NativeLand,并得到几乎相同的性能。但是,这并不能保证,如果发生防止发动机能够使用的最优化,一些fancyness在你的代码或重写建宏或种种问题,那么你就可以立即看到结果的表现。 ===
迫使它。
===
只是在JavaScript代码中唯一不变的东西。
由于表现,我认为===
具有更好的性能,因为===
比==
严格,
例如尝试在Chrome控制台下面。
> 1 == '1'
true
> 1 === '1'
false
==
必须检查比===
更多的东西
从一些站不住脚的测试,==
似乎略高于===
更快。
通过幅度不大,我的意思是,我可以看到的数以百万计的测试interations几毫秒的差别。你不可能需要的性能增益,而不是使用什么是最正确的手头的任务。
编辑:实际上,似乎取决于/什么/你比较和浏览器实现。换句话说,不要担心。
这取决于所比较的项目。因为“===”是不是更严格的“==”,它应该返回false不是“==”更快。然而,如果这两个项目是严格相等“===”应该不是“==”更多的时间,因为它必须检查平等更多的属性。