If-else语句的短路处理

3
所以我知道。
variable && runTrue();

真正的含义

if(variable){
    runTrue();
}

那么有没有更简单的方法来编写呢?

if(variable){
    runTrue();
}else{
    runFalse();
}

使用什么代替if-else语句?


2
你是否曾经想过,也许你希望以一种人们可以轻松阅读的方式编写代码,而不必费太多思考? - paxdiablo
对于经验丰富的程序员来说,“简化”的代码是最容易阅读的代码。如果您想使JavaScript代码更紧凑,则首先编写可读的代码,然后在部署过程中通过压缩器(Uglify或类似工具)运行它。双赢:您可以维护可读的代码,但最终结果是用户下载更小的文件。 - Joe White
2个回答

7

使用条件运算符 ? : 的三元表达式是为了处理简单的二选一选择而发明的:

function a() {alert('odd')}
function b() {alert('even')}
var foo = new Date() % 2;

foo? a() : b(); // odd or even, more or less randomly

等价于:

if (foo % 2) {
  a(); // foo is odd
} else {
  b(); // foo is even
}

3

是的,我发现这将与普通的if-else做相同的事情:

(variable) && (runTrue(),1) || runFalse();

这段代码变得更短了2个字符 (虽然不是很多),并且在jsPerf中进行了测试,通常短路求值 - false的速度比正常的方法更快。

(variable) &&           //If variable is true, then execute runTrue and return 1
(runTrue(),1) ||        // (so that it wouldn't execute runFalse)
runFalse();             //If variable is false, then runFalse will be executed.

当然,您始终可以使用variable?runTrue():runFalse();

3
两个字符的收益不算很大。"也许"更快并不是一个优点。将最简单的结构变得完全神秘是一个很大的缺点。 - Paul Phillips
1
适当的快捷方式是三元表达式:variable? runTrue() : runFalse(); - RobG
1
@ Derek - “它可以工作”并不足以证明在标准是“更简化的方式”,而不是更少的代码时,它比另一种选择更好。 - RobG
1
@squint - 由于ECMA-262明确禁止您访问“调用上下文”,因此无法将其传递给函数。但是,您可以设置被调用函数的this关键字,但OP并没有这样做或请求。而且,这比?:运算符需要更多代码。 - RobG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接