5

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

if (foo) {
    bar();
}

 

foo && bar();
4

3 回答 3

13

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

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

if (foo && bar()) {
    // ...
}
于 2013-07-28T12:05:15.683 回答
3

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

var result = foo && bar();

使用if版本时,上图可能如下所示:

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

哪个更详细。

于 2013-07-28T12:47:42.823 回答
2

bouke用短路评估的答案真的很好。但我想补充一点,一个好的编码风格是使用 if 语句,如果 bar() 的调用没有 boolean-return-value 并且不需要使用 bar() 满足进一步的条件。

于 2013-07-28T13:31:02.357 回答