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

举报
江咏之 发表于 2021/11/23 01:01:39 2021/11/23
【摘要】 我知道你可以通过做var variable = (condition) ? (true block) : (else block)来设置一行if / else语句的var variable = (...

我知道你可以通过做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))

   
  
  • 1

TL;博士

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

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

   
  
  • 1

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|
          ^ <-
    
        
       
    • 1
    • 2
  2.    |1-?|--2---------|:-3---|
    
        
       
    • 1
    ^ <-
    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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    例如

    return a + some_lengthy_variable_name > another_variable
    ? “yep”
    : “nop”
    • 1
    • 2
    • 3

    更多阅读

    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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    “无结合”

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

    }
    • 1
    • 2
    • 3
    • 4
    • 5

    短路评估

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

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


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

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

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

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

文章来源: jiangwenxin.blog.csdn.net,作者:前端江太公,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangwenxin.blog.csdn.net/article/details/121121567

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。