与&&和||不同,!操作符的行为与C、Java等语言是一致的,只返回boolean值(true或false)。

针对于!运算,0以及null、""(空字符串)、NaN、undefined,空对象算是做false,加上!将返回true
console.log(!0);    //null
console.log(!null);//null
console.log(NaN); //null
console.log(!"");
//null
console.log(!undefined);/null

与C、Java等语言一样,JavaScript中可以用&&、||、!三个逻辑判断符来对boolean值进行逻辑判断。
与C、Java不同的是,JavaScript中逻辑与(&&)和逻辑或(||)操作符可以应用在任何值上,而操作结束后返回的也不一定是boolean值。

JavaScript中&&的处理规则是这样的:

1.判断第一个值是否为False。如果为False,则直接返回第一个值。(0,null,空字符串,NaN,undefined,空对象皆可转换为false布尔类型)
2.如果第一个值为True,则直接返回第二个值;

var o = {x:1, y:2};
console.log(o && o.y);//2
console.log(null && x);//null

var o = {x:1, y:2};
console.log(o && o.y);//2
console.log(null && x);//null

逻辑或||的处理规则

与&&操作符类似,JavaScript中||的处理规则是这样的:

1.判断第一个值是否为True。如果为True,则直接返回第一个值。
2.如果第一个值为False,则直接返回第二个值。(0,null,空字符串,NaN,undefined,空对象皆可转换为false布尔类型)

||操作符的这种行为使得JavaScript中一些快捷写法成为现实: 
 var a = null;
 var b = 42;
 var v = a || b || 100;
 console.log(v);//42

var b = null;
 var v = a || b || 100;
 console.log(v);//100

function test(p){
   p = p || {};//if p is not passed, make it an empty object.
 }

一个特殊的错误案例,判断参数中少些了一个等号,导致将2 && true的最终结果赋值给了a
alert(a=2 && true);
--------------------- 
作者:woi123 
来源:CSDN 
原文:https://blog.csdn.net/woi123/article/details/84820008 
版权声明:本文为博主原创文章,转载请附上博文链接!

js逻辑与、或、非运算规则相关推荐

  1. [shell]shell 中| || () {} 用法以及shell的逻辑与或非

    转自:https://www.jianshu.com/p/617c1ee1e46e | 运算符 管道符号,是unix一个很强大的功能,符号为一条竖线:"|". 用法: comman ...

  2. Js判断是否为非数字

    Js判断是否为非数字 1.使用isNaN()函数 isNaN()的缺点就在于 null.空格以及空串会被按照0来处理 function isRealNum(val){// isNaN()函数 把空串 ...

  3. js的图片渐渐入渐渐出的效果(html逻辑 css逻辑 js逻辑))

    js逻辑: 第一步; 可视区的高度+只是滑出去的高度-图片的1/2===如果结果是650和文档顶部到图片的中部的距离一样的话,代表滑动到了图片的一半了. 第一:滑动过了图片的一半了. 第二:滑动等于图 ...

  4. 暑期学习日记28:js逻辑

    1.JavaScript 布尔(逻辑)代表两个值之一:true 或 false. 2.使用Boolean() 函数来确定表达式(或变量)是否为真: <!doctype html> < ...

  5. js逻辑训练题_几道javascript练习题

    走在前端的大道上 问题1: 作用域(Scope) 考虑以下代码: (function() { var a = b = 5; })(); console.log(b); 控制台(console)会打印出 ...

  6. python与或非运算规则_Python逻辑运算符及其用法

    高中数学中我们就学过逻辑运算,例如 p 为真命题,q 为假命题,那么"p且q"为假,"p或q"为真,"非q"为真.Python 也有类似的逻 ...

  7. 学JS的心路历程 -非同步执行

    JS是单线程的语言,也就是说同一时间只会执行一行程序,所以如果一段程序执行过久就会造成阻塞(blocking)的现象,必须等到它结束后才能执行下一段程序. 举个例子来说,如果我们今天要买便当,但是老板 ...

  8. 浏览器加载js的阻塞与非阻塞

    这几天因项目需求,要实现一系列的js文件加载的问题,于是,就按照常规思路写了一通,悲催的是测试后发现问题重重: 为什么会有这么多问题,仔细想来还是对浏览器加载js的原理理解不透,于是我翻阅了大量的资料 ...

  9. 计算机导论中逻辑与或非的公式,12.函数与公式之逻辑函数(or,and,not,if)

    生病了,昨天喉咙痛,今天开始头重脚轻,流鼻涕,而且嘴里没味了,晚上不想在家吃饭,和老公商量着去吃能调起味口的菜,再次走进了"黄焖鸡米饭",吃了店里的中辣,老板给我放了两只魔鬼椒,一 ...

最新文章

  1. 虚幻争霸服务器维护,《虚幻争霸》将于4月停止运营 玩家可全额退款
  2. mysql数据库dao模式_古诗MySQL数据库DAO模式实现
  3. BZOJ-1053-反素数ant
  4. just函数 python_在python里写Monad
  5. 电脑卡顿不流畅怎么解决_电脑用久了卡怎么办?学会这四招解决你的电脑卡顿问题...
  6. java泛型面试_Java泛型面试问题
  7. STL源码剖析 仿函数
  8. (23)FPGA加法器设计(第5天)
  9. 2020中科院sci分区查询_2020年中科院分区(基础版)更新
  10. 自定义exchange由IMF导致的NDR信息
  11. jsp 连接sql数据库查询(源代码)
  12. OpenCV总结:目标跟踪之CamShift算法
  13. tensorflow之regularizer
  14. 100G网络你能看懂多少?
  15. d盘格式化后怎么恢复
  16. Java 应用压测性能问题定位经验分享
  17. Android ios 表单提交,如何在iOS上模拟HTTP表单(POST)提交
  18. excel公式不自动计算_公式 | Excel根据起止日期,自动计算每月的计息天数
  19. C++静态成员变量与静态成员函数
  20. 什么是指针?什么是数组指针?什么是指针数组?

热门文章

  1. PlutoSDR + SoapySdr
  2. 2022年终感悟-时光债务
  3. avcodec_copy_context() copy方式实现h264和mp3合成mp4
  4. 几个简单代码片段-- Google C++ style guide
  5. Oracle 大表回表过滤优化案例
  6. Kindle for PC 无法放大图片的困扰:使用 Windows 自带的放大镜工具
  7. 鸟哥教会我的一些命令
  8. 洛谷P1136火柴棒等式
  9. HDMI设计3--HDMI 1.4/2.0 Transmitter Subsystem IP
  10. adb shell ip命令参数说明