浅谈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 相关文章推荐
JavaScript 序列化对象实现代码
Dec 18 Javascript
使用jQuery重置(reset)表单的方法
May 05 Javascript
jQuery入门之层次选择器实例简析
Dec 11 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 Javascript
assert()函数用法总结(推荐)
Jan 25 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
彻底解决 webpack 打包文件体积过大问题
Jul 07 Javascript
微信小程序使用request网络请求操作实例
Dec 15 Javascript
ios中视频的最后一桢问题解决
May 14 Javascript
JS实现长图上下滚动效果
Mar 19 Javascript
vue-cli3 热更新配置操作
Sep 18 Javascript
Vue用mixin合并重复代码的实现
Nov 27 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
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
php验证码生成器
2017/05/24 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Python collections模块的使用方法
2020/10/09 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
采购部主管岗位职责
2014/01/01 职场文书
档案检查欢迎词
2014/01/13 职场文书
网络程序员自荐信
2014/01/25 职场文书
感恩寄语大全
2014/04/11 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
董事长年会致辞
2015/07/29 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技