【问题标题】:The ternary operator and if A, B, else C. Are there any important differences?三元运算符和 if A, B, else C. 有什么重要的区别吗?
【发布时间】:2009-03-24 19:13:29
【问题描述】:

在 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 语句之后执行它。

【问题讨论】:

  • 学究式:您在技术上讨论条件运算符,它恰好是三元运算符(即对三个元素进行运算的运算符)。
  • 对于简短的语句,条件运算符可以比任何成熟的 if 构造“可读”。

标签: javascript conditional logic boolean


【解决方案1】:

假设:

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

然后:

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

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

【讨论】:

  • 我猜这就是 Sascha 试图指出的,但你做得更清楚了。谢谢:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我不同意只要正确使用第一个缺乏可读性,IOW a、b 和 c 本身就是简单的表达式。尽管在某些情况下它不应该被滥用,但该运算符确实会被滥用。

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

    【讨论】:

      【解决方案4】:
      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.
      

      它们的计算结果不同,因为后者是布尔表达式,不使用三元运算符。

      【讨论】:

      • 如果我在 Firefox 中执行以下代码,它会显示 2 而不是你建议的正确:“alert(1 && 2 || 3)”
      • a == true b == false c == false -> false and true && false = false a == true b == true c == false -> (true and true) or false = true a == false b == true c = true -> (false and true (=false)) or true = true
      猜你喜欢
      • 2020-09-12
      • 2013-07-12
      • 1970-01-01
      • 2010-11-27
      • 2012-07-03
      • 1970-01-01
      • 2018-06-27
      • 2020-08-28
      • 2022-12-06
      相关资源
      最近更新 更多