【发布时间】:2013-07-28 12:01:27
【问题描述】:
以下两个 sn-ps 之间有什么区别,或者有什么理由使用一个而不是另一个?
if (foo) {
bar();
}
foo && bar();
【问题讨论】:
-
第一种比较传统。但实际上,它们是相同的。
-
没有区别,但我更喜欢一行
if语句。if (foo) bar();
标签: javascript
以下两个 sn-ps 之间有什么区别,或者有什么理由使用一个而不是另一个?
if (foo) {
bar();
}
foo && bar();
【问题讨论】:
if 语句。 if (foo) bar();
标签: javascript
第二种形式称为short-circuit evaluation,其结果与第一种形式完全相同。然而,第一种形式更具可读性,应该优先考虑可维护性。
这种类型的短电路求值经常出现在 if 语句中,其中右手是有条件地求值的。请参见下面的示例; bar 仅在 foo 评估为 true 时评估。
if (foo && bar()) {
// ...
}
【讨论】:
版本foo && bar()是一个表达式,因此有一个值:
var result = foo && bar();
使用if 版本时,上图可能如下所示:
var result;
if (foo) {
result = bar();
}
这更冗长。
【讨论】:
foo && bar();是语句,不是表达式,foo && bar()是表达式。
else { result = foo; }.
bouke 用短路评估的答案真的很好。但我想补充一点,一个好的编码风格是使用 if 语句,如果 bar() 的调用没有 boolean-return-value 并且不需要使用 bar() 满足进一步的条件。
【讨论】: