您的位置:首页 > Web前端 > JavaScript

短路语法初探

2016-04-06 20:22 260 查看
首先我们先了解什么是逻辑运算符:

&& 逻辑与运算
|| 逻辑或运算
! 逻辑非运算
正统来说,参与逻辑运算的是boolean和boolean,得到的结果也是boolean

值按照真值表来定

&& 逻辑与,“且”
a && b
a

b

结果

























“都真才真”,“有假就假”。

命题1:“地球是圆的”  真的
命题2:“宋仲基很帅”  真的
命题1
 命题2
真的
 

命题1:“1+1=3”  假的
命题2:“地球是方的” 假的
命题1
 命题2  假的
 

1 //逻辑运算符

2 console.log(true &&
true); //t

3 console.log(true && false); //f

4 console.log(false && true); //f

5 console.log(false && false);     //f

 

|| 逻辑或,“或者”的意思

a || b
a

b

结果

























“有真就真”,“都假才假”

1 console.log(true || true); //t

2 console.log(true || false); //t

3 console.log(false || true); //t

4 console.log(false || false); //f

 

!就是“逻辑非”,相反的

1 console.log(!true); //f

2 console.log(!false); //t

3 console.log(!!!!!!!!!false); //t

运算顺序是非、与、或

1 true || false && !true || false;

解:原式 = true || false && false
|| false

 = true || false || false

 = true || false

 = true

 

逻辑运算符最最有意思的事情,就是所谓的“短路语法”。

就是你发现没有,

如果计算一个且运算的时候,比如a && b,a如果就是一个false,那么就不会管b是什么,直接输出false就行了,等于说直接输出a。

如果计算一个且运算的时候,比如
a && b ,a如果就是一个true,那么也不用管b是什么,直接把b当做结果输出就行了。

 

也就是说,本质上计算机进行a&&b运算的时候,不是在进行逻辑分析,这小子就想着要么扔a,要么扔b。如果a是负性的,那么直接扔出a;如果a是正性的,直接扔出b。
—— 短路语法。 要么a被短路,要么b被短路。
负性的:false,null,
0,
NaN, 空字符串(""),undefined

正性的:除了上面的,全是正性的。

1 false && 8   //false  因为计算机发现,且运算a已经是false了,直接输出false

2 null && 8   //null  因为计算机发现,且运算a已经是false性的了,直接扔出来null

3 true && 13   //13   因为计算机发现,且运算a是true,所以总结果就是看b,直接扔出b

4 12 && 13    //13   因为计算机发现,12当做true,所以总结果看b,直接扔出b

5 13 && 12    //12   因为计算机发现,13当做true,所以总结果看b,直接扔出b

6 undefined &&
哈哈  //undefined  不报错,因为a已经是负性的了,所以直接扔出a,哈哈不管

7 哈哈
&& undefined  //报错

8 true && NaN    //NaN  扔后面

 

|| 逻辑或的短路也是类似的,a||b
计算机发现a是真,那么扔a;如果a是假,那么扔b

 

1 0 || 18   //18
前面假,扔后面

2 18 || 0   //18
前面真,扔前面

3 undefined || NaN    //NaN  前面假,扔后面

4 NaN || undefined    //undefined
前面假,扔后面

 

1 88 || 99 && 66 || 55

解:原式 = 88 || 66 || 55

         = 88 || 55

     = 88

1 undefined && ("3" != 3) || NaN &&
null

解: 原式 = undefined && false || NaN && null

          = undefined || NaN && null

  = undefined || NaN

  = NaN

 

总结一下短路语法:
a&&b, 计算机要么执行a要么执行b。a真执行b,a假执行a;
a||b, 计算机要么执行a要么执行b。a真执行a,a假执行b。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript