php三目运算-javascript三元运算符是什么?

JavaScript 只有一个三元运算符“? ... :”,可用于简单的选择结构。 基本句型为“布尔表达式?sentence1:sentence2”; 当“布尔表达式”的值为true时,执行sentence1,否则执行sentence2。

本教程的运行环境:windows7系统,ECMAScript 5版本,Dell G3笔记本。

JavaScript 三元运算符

使用javascript中的三元运算符进行判别时,基本句型是:表达式? 句子 1 : 句子 2

当表达式的值为true时执行sentence1,否则执行sentence2,请看代码

<pre class="brush:php;toolbar:false">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;
   }

登录复制

当表达式为真时,即表达式不为未定义、NaN、0 或 null 时,执行句子 1,否则执行句子 2。

既然这样的函数和if一样,为什么要用它呢? 首先php三目运算,在多次判断逻辑时,三元运算符的逻辑更加简洁:

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

登录复制

只要任意一个表达式N的判断为真,则立即执行句子N,本次判断结束,后续的任何判断都不会被执行。 如果我们写 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 :
   ...

登录复制

只要创建了一个表达式N,它就会立即跳出。 原因是什么? 我们可以推测是因为三元运算符返回的是sentenceN,所以判断立即跳出。赋值的用法是一样的php三目运算,报错的原因是

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

登录复制

这种写法肯定是错误的。 所以如果我们对前面的解释有疑问,我们可以用这段代码来证明:

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

登录复制

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