浅谈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 相关文章推荐
支持ie与FireFox的剪切板操作代码
Sep 28 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 Javascript
node.js操作mysql(增删改查)
Jul 24 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
canvas知识总结
Jan 25 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
Feb 28 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
微信小程序利用co处理异步流程的方法教程
May 20 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
JavaScript 去重和重复次数统计
Mar 31 Javascript
JavaScript利用html5新方法操作元素类名详解
Nov 27 Javascript
浅谈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
PHP判断是否为空的几个函数对比
2015/04/21 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
调试php程序的简单步骤
2019/10/04 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
python+selenium开发环境搭建图文教程
2017/08/11 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python实现智能语音天气预报
2019/12/02 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python常用类型转换实现代码实例
2020/07/28 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
酒店宣传语大全
2015/07/13 职场文书
关于环保的宣传稿
2015/07/23 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server