Difference between "if (foo) bar();" and "foo

Difference between "if (foo) bar();" and "foo && bar();"

本文关键字:quot foo bar and if between Difference      更新时间:2023-09-26

以下两个片段之间有什么区别吗,或者有什么理由使用其中一个而不是另一个?

if (foo) {
    bar();
}

 

foo && bar();

第二种形式被称为短路评估,其结果与第一种形式完全相同。然而,第一种形式可读性更强,应优先考虑可维护性。

这种类型的短循环求值经常出现在if语句中,其中右手是有条件求值的。请参阅下面的示例bar只有在foo计算结果为true时才会求值。

if (foo && bar()) {
    // ...
}

版本foo && bar()是一个表达式,因此具有一个值:

var result = foo && bar();

当使用if版本时,上面可能看起来像这样:

var result;
if (foo) {
    result = bar();
}

这更为冗长。

bouke的答案和简短的cuircuit评价真的很好。但我想补充一点,如果对bar()的调用没有布尔返回值,并且不需要使用bar()满足任何进一步的条件,那么一个好的编码风格就是使用if语句。