今天在网上查了js的&&和||的相关文章,感觉现在很多人看文章都缺少验证的思想。接下来我来讲一下我对&&和||的了解,以及贴上对应的demo。

首先确认以下几点:&&与||的执行优先级是一样的,不论有多少的混用都是从左到右执行,同时需要注意短路特性
1、JS中的&&符号:
短路 与:A && B
1.1 如果A为false,表达式返回A (这个就是短路特性,提前结束)
1.2 如果A为true,表达式返回B
结论:一假即假(顾名思义,“且” 肯定是 A 且 B同时为真,结果才为真)

下面来些demo

0 && 1  // 结果 0   原因见 1.1
1 && 0  // 结果 0   原因见 1.2
1 && 2  // 结果 2   原因见 1.2

2、JS中的||符号:
|| 短路 或:A || B
2.1 如果A为true,表达式返回A (这个就是短路特性,提前结束)
2.2 如果A为false,表达式返回B
结论:一真即真(顾名思义,“或“ 只要 A 或 B有一个为真,结果就为真)

下面来些demo

1 || 0 // 结果 1  原因见 2.1
0 || 2 // 结果 2  原因见 2.2

对于一个符号的话都比较好理解,对于两个符号混用的也是同样的道理

1 && 3 || 0 && 4  // 结果是 3

很多分析:先执行1&&3 返回3,再执行0&&4返回0,最后执行结果比较 3||0 返回 3,这个过程是不对的,其实正确的执行顺序应该是遵循短路特性,具体过程如下:

第1步:先执行1&&3 因为,1为真,没有提前短路,返回3
第2步:再执行3 || 0 ,这时候3 || 0的时候,因为 || 的第一个是3,提前结束,所以返回3,其实是没有执行 0 && 4的。

接下来用一个demo来验证一下:
备注: 为了验证,我们把原先 a 改成 (console.log(“run a”), a),这里用的了 运算符 “,” 这个运算符是取最后一个的值,所以等价。

(console.log("run 1"), 1) && (console.log("run 3"), 3) || (console.log("run 0"), 0) && (console.log("run 4"), 4)


上面的结果验证了我们的猜想。

其实 && 和 || 很简单,只要知道它们每个返回结果,以及短路特性,就可以算出最后的结果。

&& 和 || 除了判断结果之外,还能给变量赋值默认值的作用
eg:
a = a || “默认值”;

js中的 与或运算顺序 (包含例子)相关推荐

  1. python操作符顺序_Python语言中的操作符与运算顺序

    在新鲜出炉的9月TIOBE编程语言排行榜上,Python历史性的挤下C++,次进入前三位,Python的热度也以肉眼可见的速度快速上涨着,学习Python的人越来越多,不只是成人,很多青少儿也选择从P ...

  2. JS中双层for循环执行顺序

    js中双层for循环的执行顺序 1 首先会先执行第一层循环,执行顺序如图所示.1:执行变量**(仅执行一次)**2:执行条件 3:执行代码块区域(注意,代码块中包含第二层循环) 4最后执行++. 2 ...

  3. JS中同名函数有效执行顺序

    html中如果出现函数同名时: 如果有多个外部引入的js文件,例如a.js和b.js(引入顺序假定是a.js,然后是b.js),同时html中本身也有内部的js. 那么针对 出现函数名一样的情况时,无 ...

  4. c语言中同级运算符的运算顺序,二 如何学习C语言的运算符和运算顺序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言的运算功能十分丰富,运算种类远多于其它程序设计语言.因此,当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则 ...

  5. JS中页面跳转,传值包含中文时乱码解决方案

    首先,在JS中将要传递的中文编码:encodeURI(encodeURI(value)): 然后在跳转界面中取值时通过以下方式解码:java.net.URLDecoder.decode(value , ...

  6. js中的装饰器执行顺序

    /*** 执行顺讯* [(property)...]->[(parameter->method)...]->constructor->class* [属性...]->[( ...

  7. 彻底理解js中this

    相关博文:http://blog.csdn.net/libin_1/article/details/49996815 彻底理解js中this的指向,不必硬背. 首先必须要说的是,this的指向在函数定 ...

  8. 彻底理解js中this的指向

    首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象(这句话有些问题,后面会解释为什么会有问题,虽然 ...

  9. 理解JS中的this的指向

    原文地址:https://www.cnblogs.com/pssp/p/5216085.html#1 首先必须要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到 ...

最新文章

  1. 赠书 | 图像分类问题建模方案探索实践
  2. 吊打 ThreadLocal!
  3. python parser count_Python分析哪座城市小吃最好吃
  4. Android中SharedPreferences与Editor的使用
  5. 加速财务自由的7种理财方法
  6. Linux使用tcpdump抓获取WIFI包
  7. idea java 非法字符_IDEA提示非法字符,你不懂的UTF-8
  8. SQLSERVER聚集索引的整理(重建)的必要性测试
  9. ZeroClipboard实现复制
  10. 修改一行代码,将图像匹配效果提升14%
  11. 【软件加密】python制作一个超强的加密软件
  12. TCP通信丢包原因总结
  13. 反垃圾邮件组织spamhaus黑名单移除说明
  14. 新加坡NETS高管Alvin Seck先生访问日本,以利用NIPPON Platform促进业务发展
  15. 基金训练营学习笔记3-股票基金
  16. 四位达林顿_达林顿管的四种接法与常用型号
  17. java注释搞笑图案_搞笑的代码注释,那些有趣的程序员
  18. vasp测试计算机,求助:无法判断vasp测试是否完成
  19. Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as S
  20. 2018VR一体机VR眼镜哪个牌子好?大家都选了UGP VR眼镜,UGP VR一体机

热门文章

  1. ubuntu16.04 LTS安装ROS Kinetic详细步骤(包含出现的错误)
  2. 5种方法输出10的阶乘
  3. unity技术补全计划
  4. python创建excel文件报错_python-通过openpy操作excel
  5. Shell脚本案例:安装指定路径下的所有apk到安卓设备
  6. 纸牌屋第一季(2)--part2
  7. Chrome无法连接到网络
  8. 2014Esri中国用户大会:ArcGIS平台六大亮点能力
  9. Linux定时清除缓存脚本与清除命令
  10. DockerHub入门