逻辑非!

  • 用来对布尔值进行取反,即!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;

最新文章

  1. java线程同步 以及wait 和notify用法
  2. 分享一个异步任务在遇到IO异常时支持递归回调的辅助方法
  3. LinuxShell脚本攻略--第二章 命令之乐
  4. Mybatis关于like的字符串模糊处理
  5. Selenium IDE- 不同的浏览器
  6. 【POJ】【2151】Check the difficulty of problems
  7. iOS开发常用输入校验
  8. MFC DialogBar 按钮灰色不响应
  9. 自己学习过程中关于以后有可能用到的技术的备份,微信广告滑屏组件 iSlider
  10. 自己动手写easyui的checkbox
  11. ThinkPHP使用分组详细介绍(十七)
  12. 进程和线程之间的关系和区别 和 CPU牒
  13. JSP知识点大纲图
  14. 使用uiautomation自动化重命名pdf书签,使全大写字母变成首字母大写
  15. module.exports与exports区别
  16. 201771010126 王燕《面向对象程序设计(Java)》第十三周学习总结
  17. mysql性能排查思路
  18. ORA-19566: exceeded limit of 0 corrupt blocks for file E:\xxxx\<datafilename>.ORA.
  19. Python 多进程进程池Queue进程通信
  20. 使用swiper插件,隐藏swiper后再显示,不会触发自动播放的解决办法

热门文章

  1. oneplus8手机蓝牙连接tws耳机无法双击退出语音助手
  2. 2022-08-05-欢迎使用_Typecho
  3. 开源动态可监控线程池DynamicTp介绍
  4. 魔改editormd组件,优化ToC渲染效果
  5. 记一个深层的bug
  6. Dubbo 原理和机制详解 (非常全面)
  7. OpenMP 入门
  8. Spring Boot:自定义 Whitelabel 错误页面
  9. 从0搭建vue3组件库: Input组件
  10. Go语言基础-从菜鸟到火鸡