浅谈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 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
jquery、js操作checkbox全选反选
Mar 12 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
codeMirror插件使用讲解
Jan 16 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 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脚本加密专家php解密算法
2020/09/13 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
利用JS实现数字增长
2016/07/28 Javascript
AngularJS ng-change 指令的详解及简单实例
2016/07/30 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
python高级特性简介
2020/08/13 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
装修五一活动策划案
2014/01/23 职场文书
运动会100米加油稿
2015/07/21 职场文书
python实现简易名片管理系统
2021/04/11 Python