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
发表评论