以下两个片段之间是否存在任何差异,或者是否有任何理由使用其中一个?
if (foo) {
bar();
}
foo && bar();
答案 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()来满足其他条件。