JavaScript:操作符:逻辑运算符及其隐式转换数据类型
2024-09-08 09:09:01
逻辑非!
用来对布尔值进行取反,即
!true = false
;当取反的变量不是布尔值,会进行隐式转换为布尔值:
- 非0的数字,都转换为true
- 非空字符串,转换为true
- 非空对象,转换为true
- Infinity = true
- 0,转换为false
- 空字符串,转换为false
- NaN = false
- null = false
- undefined = false
可以接连两次取反,即两个感叹号
!!
;
逻辑与&&
和逻辑或||
同数学意义上的与和或的概念一样;
逻辑与的优先级比逻辑或高;
短路运算,即运算符两端的两个逻辑表达式,当第一个逻辑表达式不符合条件时,就会得出结果,不会再去计算第二个逻辑表达式;
当逻辑表达式不是布尔值的结果时,会进行隐式转换为布尔值,但是最后运算结果,返回的不是布尔值,而是进行隐式转换之前的原结果;
上图可以很好的理解短路运算与隐式转换,来说明一下为什么是这样的输出结果:
上面逻辑运算符左右两边的两个逻辑表达式均为数字,非0的数字转为true,0转为false;
对于第一行代码,转换为
true && true
,左边为true不能确定逻辑与运算结果,得再去计算右边的,右边也为true,此时确定结果,并且最后计算停留在右侧,所以输出结果为右侧的原结果,即2;对于第二行代码,转换为
false && true
,左边为false可以直接确定逻辑与运算结果,此时计算停留在左侧,所以输出结果为左侧的原结果,即0;对于第三行代码,转换为
true || false
,左边为true可以直接确定逻辑或运算结果,此时计算停留在左侧,所以输出结果为左侧的原结果,即1;对于第四行代码,转换为
false || true
,左边为false不能直接确定逻辑或运算结果,得再去计算右边的,右边为true,此时确定结果,并且最后计算停留在右侧,所以输出结果为右侧的原结果,即1;
最新文章
- java线程同步 以及wait 和notify用法
- 分享一个异步任务在遇到IO异常时支持递归回调的辅助方法
- LinuxShell脚本攻略--第二章 命令之乐
- Mybatis关于like的字符串模糊处理
- Selenium IDE- 不同的浏览器
- 【POJ】【2151】Check the difficulty of problems
- iOS开发常用输入校验
- MFC DialogBar 按钮灰色不响应
- 自己学习过程中关于以后有可能用到的技术的备份,微信广告滑屏组件 iSlider
- 自己动手写easyui的checkbox
- ThinkPHP使用分组详细介绍(十七)
- 进程和线程之间的关系和区别 和 CPU牒
- JSP知识点大纲图
- 使用uiautomation自动化重命名pdf书签,使全大写字母变成首字母大写
- module.exports与exports区别
- 201771010126 王燕《面向对象程序设计(Java)》第十三周学习总结
- mysql性能排查思路
- ORA-19566: exceeded limit of 0 corrupt blocks for file E:\xxxx\<;datafilename>;.ORA.
- Python 多进程进程池Queue进程通信
- 使用swiper插件,隐藏swiper后再显示,不会触发自动播放的解决办法