以下两个片段之间有什么区别,或者有什么理由使用另一个片段吗?
if (foo) {
bar();
}
foo && bar();
第二种形式称为短路评估,其结果与第一种形式完全相同。然而,第一种形式更具可读性,应该优先考虑可维护性。
这种类型的短电路求值经常出现在 if 语句中,其中右手是有条件地求值的。请参见下面的示例;仅当 foo 评估为 true 时才评估bar 。
if (foo && bar()) {
// ...
}
版本foo && bar()
是一个表达式,因此有一个值:
var result = foo && bar();
使用if
版本时,上图可能如下所示:
var result;
if (foo) {
result = bar();
}
哪个更详细。
bouke用短路评估的答案真的很好。但我想补充一点,一个好的编码风格是使用 if 语句,如果 bar() 的调用没有 boolean-return-value 并且不需要使用 bar() 满足进一步的条件。