短路语法初探
来源:互联网 发布:湖南文艺出版社 知乎 编辑:程序博客网 时间:2024/06/05 15:27
首先我们先了解什么是逻辑运算符:
&& 逻辑与运算
|| 逻辑或运算
! 逻辑非运算
正统来说,参与逻辑运算的是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。
- 短路语法初探
- swift语法初探 -- 1
- Scala基本语法初探
- ES6语法初探
- 语法 fgets函数原理初探
- 2.Swift初探-基本语法
- 3.Swift初探-基本语法
- htmlcleaner使用及xpath语法初探
- 【C语言】-->语法 fgets函数原理初探
- iOS学习笔记(一):ObjectiveC语法初探
- htmlcleaner使用及xpath语法初探
- java枚举类初探-语法糖-反编译
- Velocity初探小结--velocity使用语法详解
- Kotlin初探之语法简介分析
- 分支结构的语法格式以及短路现象的应用
- Lua学习第二课_初探lua和lua语法
- 黑马程序员 7 oc核心语法与内存管理初探
- Python语法实践之初探列表推导与生成器
- 数据工程师常用的 Shell 命令
- MR程序的几种提交运行模式
- 线程和锁
- 第四周项目5-递归求Fibnacci数(4)
- 前端开发——Animation动画
- 短路语法初探
- Bootstrap学习笔记—做一个简单的缩略图
- 任务和回退栈
- 随笔
- 2015山东省第六届ACM省赛 Nias and Tug-of-War
- 设计模式,,,一个程序猿应一生追求完美的东西
- caffe代码解析知识点汇总
- 三种纯CSS方法实现等高列
- 详解ThreadPoolExecutor与ScheduledThreadPoolExecutor