a&& b&& c VS if if - 性能差异是什么?

时间:2015-05-15 17:30:17

标签: javascript performance

刚看到一行代码:a && b && c。我认为这应该等同于if(a && b) {c}。但我真的很好奇,这些代码有任何性能差异,或者将它放在一行中只是很酷吗?

这是实际代码:sourcesPanel && sourcesPanel.tips && sourcesPanel.tips.clearTimers()

sourcesPanelsourcesPanel.tips是程序中的两个对象。 基本上,我认为它检查这两个对象是否存在,它们是否存在,称之为clearTimers函数。

3 个答案:

答案 0 :(得分:1)

这实际上是一次双重检查,而不是像你一样简单的条件检查:if(a && b) {c}

等同于a && b && c的是:

if (a && b){
    if(c){
        // do something

所有abc都必须真实。

a && b && c比做

更实用
if (a){
    if (b){
        if(c){
            // do something

但是,如果a && b && c评估b,则永远不会评估a false之类的三重检查。因此节省时间。仅对ca也属实的b进行评估时也是如此。

答案 1 :(得分:1)

JS中的逻辑运算符有一个非常重要的行为:它们返回第一个确定失败或后续的操作数。如果没有。

if (a) { if (b) { ...的行为非常简单:如果它们是真实的,请输入该块。

&&的行为不同:

foo = 1 && 2 && 3; // foo = 3, succeeds all the way through
foo = 1 && 0 && 3; // foo = 0, failed at 0
foo = 1 && null && 3; // foo = null, failed at null

当在 if使用逻辑运算符时,行为似乎完全相同。它们单独使用或与作业一起使用时,它们的行为方式相对出乎意料。

使用||提供默认值:

opt = opt || {foo: bar}; 

如果opt是真实的(对于存在的对象),请使用它,否则使用默认值。其他逻辑运算符的行为方式相同。

答案 2 :(得分:0)

在某些情况下,性能会有所改善。

该行从左到右逐步执行,并在失败后立即离开。

因此,如果a为假,则不会评估b和c。

你在bash中看到了很多,其中一条指令依赖于另一条指令成功,但无论如何都必须尝试第一条指令。