浅谈JS运算符&&和|| 及其优先级


Posted in Javascript onAugust 10, 2016

今天看了一段YUI compressor压缩的js代码:

userNum && (ind += index,ind >= userNum && (ind -= userNum),ind < 0 && (ind === -2 && (ind = -1),ind += userNum),selLi.removeClass("on"),$(selLi[ind]).addClass("on"));

直接疯掉了,估计一下子没几个人能看懂。那么就把他“翻译”一下。

&& (逻辑与)

这里主要是一个“&&”运算,首先要搞懂这个,看一个简单的例子:

1 var a = 1 && 2 && 3;//3 

2 var b = 0 && 1 && 2;//0 

3 var c = 1 && 0  && 2;//0 

4 alert(a),alert(b),alert(c);

嘿嘿,写法很奇怪,运行的结果是3,0,0。一般我们在if语句中经常用到。“&&” (逻辑与) 运算和“||”运算真好相反,“&&” 运算遇到false就返回。

例如: a && b ,如果 a 为true,直接返回b,而不管b为true或者false 。如果 a 为false 那么直接返回a,上面例子中第一个var a = 1 && 2 && 3;因为1 && 2,1为真,返回2;2&&3, 2为真,返回3 。

搞懂了“&&” 运算,再来看最上的面的YUI compressor压缩的js代码,翻译一下:

if(userNum){
	ind+=index;
	if(ind>=userNum){
	 	ind-=userNum;
	}
     if(ind < 0){
		if(ind === -2){
			ind = -1;
		}
  		ind += userNum;
	}
	selLi.removeClass("on");
	$(selLi[ind]).addClass("on");
  }

说来惭愧,年纪大了,足足“翻译”了半个小时,还是在同事的帮助下才“翻译”正确。

||(逻辑或)

再来看看“||”(逻辑或)运算,看例子:

1 var a = 0 || 1 || 2;//1 

2 var b = 1 || 0 || 3;//1 

3 alert(a),alert(b);

“||”运算遇到true就返回。例如:a || b ,如果 a 为false,直接返回b,而不管b为true或者false 。如果 a 为true,直接返回a,而不会继续往下执行。

&& (逻辑与) 和||(逻辑或)混合使用的时候要注意他们的优先级:

&& (逻辑与) 优先级高于||(逻辑或)

return a && b || c ,

根据a来判断返回值,a 是 false 则肯定返回 c;如果 b , c 都是 true ,那么我们就可以根据 a 来决定b 还是 c ,如果 a 是 false 则返回 c,如果a是true 则返回 b。

return a || b && c

根据优先级相当于先算 b && c ,然后和a 相 或;如果a是true,则返回a,不论是b或c,如果a是false,则如果b是false,返回b,如果b是true,返回c; 

1 var a = 3  &&  0 || 2;  //2 

3 var b = 3 || 0  &&  2; // 3 

5 var c= 0 || 2 && 3; // 3 

6 alert(a),alert(b),alert(c);

另附:JS运算符优先级(从高到低列出)

运算符 描述
. [] () 字段访问、数组下标、函数调用以及表达式分组
++ -- - ~ ! delete new typeof void 一元运算符、返回数据类型、对象创建、未定义值
* / % 乘法、除法、取模
+ - + 加法、减法、字符串连接
> >>> 移位
>= instanceof 小于、小于等于、大于、大于等于、instanceof
== != === !== 等于、不等于、严格相等、非严格相等
& 按位与
^ 按位异或
| 按位或
&& 逻辑与
|| 逻辑或
?: 条件
= oP= 赋值、运算赋值
, 多重求值

以上这篇浅谈JS运算符&&和|| 及其优先级就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery中each遍历对象和数组示例
Aug 05 Javascript
node.js开机自启动脚本文件
Dec 24 Javascript
jQuery中remove()方法用法实例
Dec 25 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
JavaScript暂停和继续定时器的实现方法
Jul 18 Javascript
Vue数据驱动模拟实现3
Jan 11 Javascript
利用JS做网页特效_大图轮播(实例讲解)
Aug 09 Javascript
微信小程序带动画弹窗组件使用方法详解
Nov 27 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
浅谈jQuery中的checkbox问题
Aug 10 #Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
Aug 10 #Javascript
Three.js学习之网格
Aug 10 #Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 #Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
Aug 10 #Javascript
最棒的Angular2表格控件
Aug 10 #Javascript
浅谈js中的三种继承方式及其优缺点
Aug 10 #Javascript
You might like
15种PHP Encoder的比较
2007/03/06 PHP
PHP Squid中可缓存的动态网页设计
2008/09/17 PHP
PHP 文件扩展名 获取函数
2009/06/03 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
市场营销专科应届生求职信
2013/11/24 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
婚假请假条怎么写
2014/04/10 职场文书
家长会感言
2015/08/01 职场文书
初中团支书竞选稿
2015/11/21 职场文书
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis