短路语法初探
2016-04-06 20:22
260 查看
首先我们先了解什么是逻辑运算符:
&& 逻辑与运算
|| 逻辑或运算
! 逻辑非运算
正统来说,参与逻辑运算的是boolean和boolean,得到的结果也是boolean
值按照真值表来定
&& 逻辑与,“且”
“都真才真”,“有假就假”。
命题1:“地球是圆的” 真的
命题2:“宋仲基很帅” 真的
命题1
且 命题2
真的
命题1:“1+1=3” 假的
命题2:“地球是方的” 假的
命题1
且 命题2 假的
|| 逻辑或,“或者”的意思
“有真就真”,“都假才假”
!就是“逻辑非”,相反的
运算顺序是非、与、或
解:原式 = 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
正性的:除了上面的,全是正性的。
|| 逻辑或的短路也是类似的,a||b
计算机发现a是真,那么扔a;如果a是假,那么扔b
解:原式 = 88 || 66 || 55
= 88 || 55
= 88
解: 原式 = 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。
&& 逻辑与运算
|| 逻辑或运算
! 逻辑非运算
正统来说,参与逻辑运算的是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; |
|| 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 || 55
= 88
1 undefined && ("3" != 3) || NaN && null |
= undefined || NaN && null
= undefined || NaN
= NaN
总结一下短路语法:
a&&b, 计算机要么执行a要么执行b。a真执行b,a假执行a;
a||b, 计算机要么执行a要么执行b。a真执行a,a假执行b。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享