“if(foo)bar();”之间的区别和“foo&& bar();”

时间:2013-07-28 12:01:28

标签: javascript

以下两个片段之间是否存在任何差异,或者是否有任何理由使用其中一个?

if (foo) {
    bar();
}

foo && bar();

3 个答案:

答案 0 :(得分:12)

第二种形式称为short-circuit evaluation,其结果与第一种形式完全相同。但是,第一种形式更易读,应该是可维护性的首选。

这种类型的短路评估经常出现在if语句中,其中右手是有条件评估的。见下面的例子;仅当foo评估为true时,才会评估 bar

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

答案 1 :(得分:3)

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

var result = foo && bar();

使用if版本时,上面的内容可能如下所示:

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

更详细。

答案 2 :(得分:1)

使用短电路评估的布克的答案非常好。但我想补充一点,好的编码风格是使用if语句,如果bar()的调用没有boolean-return-value,并且不需要使用bar()来满足其他条件。