【问题标题】:can I use `else if` with a ternary operator?我可以将“else if”与三元运算符一起使用吗?
【发布时间】:2018-04-17 23:36:31
【问题描述】:

我可以只在三元运算符语法的语句中使用ifelse,还是我也可以以某种方式包含else if

示例:

if(a) {
   x
}
else if(y) {
   c
}
else {
   b
}

【问题讨论】:

标签: javascript ecmascript-6


【解决方案1】:

与带有可选else 或可选else if 分支的if 不同,三元运算符有两个且只有两个分支。

它实际上是名称的一部分。其中a + b 中的+ 是一个二元 运算符,即它有两个operands? 有三个,如a ? b : c,称为三元 em> 正因为如此。从技术上讲,除了? 之外,可能还有其他三元运算符,但在大多数语言中它们不存在,因此通常理解名称“三元”表示? 运算符。

如果您对第二个子句进行子分支,您可以拥有类似else if 的功能:

a ? b : (c ? d : e)

这通常是个坏主意,因为三元运算一开始可能会很混乱,而且像这样的分层通常是通往无法维护代码的快车。

写起来好多了:

if (a) {
  b
}
else if (c) {
{
  d
}
else {
  e
}

这更冗长,但非常清楚。

如果你过于激进地使用三元组,你最终会得到如下代码:

a()?c?d?e:f:g:h?i(j?k:l?m:n):o

谁都猜得到里面发生了什么。

【讨论】:

  • 括号不是必需的。
  • @NinaScholz 它们对于更清楚地说明结构是必要的。没有它们,它就会变成一堆神秘的符号。
  • 基本上它可以工作,因为if(a){b}elseif(c){d}else{e} 等于if(a){b}else{ if(c){d}else{e} }
  • @JonasW。恰恰。 else if 只是 else { if { ... }} 的简写语法
【解决方案2】:

您可以堆叠多个三元组:

var x = (y) ? 1 : ( (z) ? 2 : 0 );

【讨论】:

    【解决方案3】:

    很有可能! 你可以使用这个:

    a ? b : b ? c : d
    

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 2017-03-25
      • 2015-06-05
      • 2013-01-24
      • 2010-12-12
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      相关资源
      最近更新 更多