js中的三目运算符详解

判断javascript中的三目运算符用作判断时,基本语法为:expression?sentence1:sentence2当expression的值为真时执行sentence1,否则执行sentence2,请看代码varb=1,c=1a=2;a>=2?b++:b–;b…

大家好,又见面了,我是你们的朋友全栈君。

判断

javascript中的三目运算符用作判断时,基本语法为: expression ? sentence1 : sentence2
当expression的值为真时执行sentence1,否则执行 sentence2, 请看代码

   var b = 1,
       c = 1 
       a = 2;
   a >= 2 ? b++ : b--;
   b   // 2
   a < 2 ? c++ : c--;
   c   // 0

从上面代码中,我们暂时会认为三目运算符相当于if + else(下面再详聊)

   if(expression){ 
      sentence1;
   } else {
      sentence2;
   }

当expression为真,即expression不为undefined,NaN,0,null的时候执行sentence1,否则执行sentence2。
既然这样的功能和if相同,为什么还要使用它?首先,在逻辑多次判断的时候,三目运算符逻辑更简洁:

   expression1 ? sentence1 :
   expression2 ? sentence2 :
   expression3 ? sentence3 :
   ...

只要任意一个expressionN的判断为真,那么sentenceN立即执行,这个判断结束,后面的任何判断不再执行。而如果我们写成if-else

   if(expression1){
      sentence1;
   } else if(expression2){ 
      sentence2;
   } else if(expression3){
      sentence3;
   } ...

这样书写逻辑看起来比较心累,所以在jquery和zepto源码中,我们会大量看到三目运算符的应用。

赋值

另一个经典的应用场景在于赋值,var param = expression ? value1 : value2,这个相信大家经常用到

   var b,
      c = 1;
   var a = b ? 2 : 1;
   a    // 1
   var a = c > 0 ? 2 : 1
   a   // 2

再谈判断

有一天写了这样的代码

  function xx(){ 
   
      var a = 1,
      b = 3;
      a < b ? return false : ''
  }  

居然报错了! 为什么报错,我们会仔细看一下上面的多个判断

   expression1 ? sentence1 :
   expression2 ? sentence2 :
   expression3 ? sentence3 :
   ...

只要有一个expressionN成立,就马上跳出。原因是什么呢? 我们可以猜想是因为三目运算符return了sentenceN,所以判断立即跳出。赋值的用法也一样,之所以报错的原因是

   if(expression){
      return (return 2);
   }

这样的写法肯定报错了。那么如果我们对上面的解释有疑问,我们可以用这样的代码来证明:

   var a = 1,
       b = 2;
   var c = b > 1 ? a++ : 0;
   c   // 1

c为什么是1,因为n++是在执行完表达式后再加1,如果return a++,先return 再加1,所以这里的c等于1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124856.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月4日 下午3:35
下一篇 2022年4月4日 下午3:35


相关推荐

  • CMD命令提示符窗口中的快捷键、小技巧和常用命令

    CMD命令提示符窗口中的快捷键、小技巧和常用命令快捷键:F1:按F1一次,命令提示符向后切换到已经执行过的命令字符。如果已经是最后的一条的命令,则不进行任何切换操作。例子:之前输入“dir”,按F1一次后自动输入d,按两次自动输入i,三次自动输入r。F2:按下此键后,会提示“输入可复制的字符数量”,此时直接按下上次输入命令中包含的字符(区分大小写)后命令提示符将自动输入到按键字符之前的上次输入的命令

    2022年4月5日
    91
  • 007 矩阵的秩定义、秩求法、秩的性质「建议收藏」

    007 矩阵的秩定义、秩求法、秩的性质「建议收藏」007矩阵的秩定义、秩求法、秩的性质

    2022年5月15日
    37
  • navicat 15 for mysql激活码[最新免费获取]「建议收藏」

    (navicat 15 for mysql激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0E14HXZ4QL-eyJsaWNlbnNlSW…

    2022年3月28日
    355
  • 微积分 —— 有限覆盖定理

    微积分 —— 有限覆盖定理假想闭区间 0 1 开区间 0 1 不符合有限覆盖定理的要求 里的每个点 无数个点 都是一个小人儿 下雨时 他们撑起无数的小伞 表示左右的邻域 小伞为每个小人都很好地遮了雨 有限覆盖定理说的是 此时没有必要用无穷多把伞 从这些伞里一定可以挑出有限把伞 其他的收起来 照样可以遮雨 比如下面的一串伞 重叠区间 13 1 14 12

    2026年3月17日
    2
  • 广域网技术

    广域网技术1.以太网直连不同网段互通arpstatic10.1.11.200e0-fc8e-6612(绑定静态arp表项,不使用arp广播解析mac,直接使用绑定mac封装)iproute-s10

    2022年7月2日
    31
  • Eurake和Zookeeper的区别

    Eurake和Zookeeper的区别拉取方式zookeeper通知消费者来拿Eurake是定时去拿集群方式zookeeper分主从eureka没有主从之分设计角度不同capc 一致性 a 可用性 p 分区容错区 如果zookeeper的主集群挂掉之后那么整个zookeeper的集群就无法对外提供服务,大多数情况可以容忍一段时间的脏数据但是不能接收整个注册中心无法对外提供服务。所以在设计时zookeeper强调cp(c在官网的解释是一致性,底层有一个queu…

    2022年5月27日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号