三元运算符和A,B,否则C.是否存在重要差异?

时间:2009-03-24 19:13:29

标签: javascript conditional logic boolean

有几种方法可以在javascript中执行此操作。

最重要,最具可读性和灵活性的可能是:

if (a){
    //b
}
else {
    //c
}

其他只适用于分配且不太可读的东西是:

var foo = 'c';
if (a){
    foo = 'b';
}

我的主要问题是关于我能想到的最后两种方法:

var foo = a ? b : c;

var foo = a && b || c;

这两个表达式之间有什么不同吗?除了缺乏的可读性之外。

*尽管可以将foo指定为函数,然后在if语句之后执行它。

4 个答案:

答案 0 :(得分:8)

假设:

var a = false, b = '', c = 'bar';

然后:

var foo = a ? b : c; // foo == ''
var foo = a && b || c; // foo == 'bar'

这两者并不相同;你永远不应该使用布尔运算符代替条件运算符。像其他的回答者一样,我也认为条件运算符不缺乏简单表达式的可读性。

答案 1 :(得分:5)

三元运算符对我来说无疑是可读的。甚至比第一个例子还要多,因为简洁的逻辑代码总是比执行相同操作的许多控制代码行更容易理解。

答案 2 :(得分:3)

我不同意,只要正确使用,第一个缺乏可读性,IOW a,b和c本身就是简单表达。虽然在不应该的情况下,这个操作符确实被滥用了。

类似地,第二个表达式,使用结果foo作为布尔值以外的任何东西都不会很好。使用布尔运算符返回非布尔值,因为它们的工作方式只是令人困惑。但是作为一个布尔表达式是合理的。

答案 3 :(得分:1)

var foo = a ? b : c;    // foo is b when a is true else c.
var foo = a && b || c;  // foo is true if a and b are true or c is true.

它们不会评估相同的结果,因为后者是一个布尔表达式,而不是使用三元运算符。

相关问题