js一行If ... else ... else if语句

我知道你可以通过做var variable = (condition) ? (true block) : (else block)来设置一行if / else语句的var variable = (condition) ? (true block) : (else block) var variable = (condition) ? (true block) : (else block) ,但我想知道是否有办法在其中放入else if语句。 任何建议,将不胜感激,谢谢大家!


当然,你可以做嵌套的三元操作符,但它们很难阅读。

var variable = (condition) ? (true block) : ((condition2) ? (true block2) : (else block2))

TL;博士

是的,你可以...如果一个然后一个,否则如果B然后如果C然后C(B),否则B,否则空

a ? a : (b ? (c ? c(b) : b) : null)

a
? a
: b
? c
? c(b)
: b
: null

更长的版本

三元运算符?:用作内联if-else是正确的关联 。 总之这意味着最右边的? 获得第一喂,它需要只有一个操作数最接近的左侧两个 ,有: ,在右边。

实际上,请考虑以下声明(与上述相同):

a ? a : b ? c ? c(b) : b : null

最右边的? 首先得到喂养,所以找到它及其周围的三个参数,并连续向左扩展到另一个?

 `  a ? a : b ? c ? c(b) : b : null  ^
<---- RTL
  1.        |1-?-2----:-3|
          ^ <-
    
  2.    |1-?|--2---------|:-3---|
    
    ^ <-
    3.|1-?-2-😐–3--------------------|

result: a ? a : (b ? (c ? c(b) : b) : null) `

这就是计算机如何读取它:

  • 术语a被读取。
    节点: a
  • 非终端? 被阅读。
    节点: a ?
  • 术语a被读取。
    节点: a ? a a ? a
  • 非终结符:被读取。
    节点: a ? a : a ? a :
  • 术语b被读取。
    节点: a ? a : b a ? a : b
  • 非终端? 被读取,触发右相关性规则。 相关性决定:
    节点: a ? a : (b ? a ? a : (b ?
  • 术语c被读取。
    节点: a ? a : (b ? c a ? a : (b ? c
  • 非终端? 被读取,重新应用右联合性规则。
    节点: a ? a : (b ? (c ? a ? a : (b ? (c ?
  • 术语c(b)被读取。
    节点: a ? a : (b ? (c ? c(b) a ? a : (b ? (c ? c(b)
  • 非终结符:被读取。
    节点: a ? a : (b ? (c ? c(b) : a ? a : (b ? (c ? c(b) :
  • 术语b被读取。
    节点: a ? a : (b ? (c ? c(b) : b a ? a : (b ? (c ? c(b) : b
  • 非终结符:被读取。 三元运算符?:从前一个范围满足,范围已关闭。
    节点: a ? a : (b ? (c ? c(b) : b) : a ? a : (b ? (c ? c(b) : b) :
  • 术语null被读取。
    节点: a ? a : (b ? (c ? c(b) : b) : null a ? a : (b ? (c ? c(b) : b) : null
  • 没有令牌可读。 关闭剩余的左括号。

    结果是: a ? a : (b ? (c ? c(b) : b) : null) a ? a : (b ? (c ? c(b) : b) : null)

  • 更好的可读性

    从上面的丑陋的上线者可能(并应该)为了可读性而重写为:
    (请注意,压痕隐式地定义正确的关闭装置,如括号()做的。)

    a
    ? a
    : b
    ? c
    ? c(b)
    : b
    : null

    例如

    return a + some_lengthy_variable_name > another_variable
    ? “yep”
    : “nop”

    更多阅读

    Mozilla:JavaScript条件运算符
    Wiki:运算符关联


    奖金:逻辑运算符

    var a = 0 // 1
    var b = 20
    var c = null // x=> {console.log(‘b is’, x); return true} // return true here!
    a
    && a
    || b
    && c
    && c(b) // if this returns false, || b is processed
    || b
    || null

    在这个例子中使用逻辑运算符是丑陋的错误,但这是他们闪耀的地方…

    “无结合”

    function(mayBeNull) {
    var cantBeNull = mayBeNull || 42 // “default” value
    var alsoCantBe = mayBeNull ? mayBeNull : 42 // ugly…

    }

    短路评估

    false && (anything) // is short-circuit evaluated to false.
    true || (anything) // is short-circuit evaluated to true.

    逻辑运算符
    无结合
    短路评估


    这主要用于分配变量,它使用二项式条件,例如。

    var time = Date().getHours(); // or something
    

    var clockTime = time > 12 ? ‘PM’ : ‘AM’ ;

    没有ElseIf,为了开发而不使用链接,如果您在.js中使用多个条件,则可以使用更快的switch

posted @ 2021-11-03 15:13  江咏之  阅读(232)  评论(0编辑  收藏  举报