浅谈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 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
点击文章内容处弹出页面代码
Oct 01 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
Mar 03 Javascript
推荐20家国外的脚本下载网站
Apr 28 Javascript
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
js数组操作学习总结
Nov 04 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
Angular中$broadcast和$emit的使用方法详解
May 22 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
Jun 16 Javascript
Vue单页面应用中实现Markdown渲染
Feb 14 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
咖啡知识大全
2021/03/03 新手入门
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
JavaScript模拟push
2016/03/06 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
Java Varargs 可变参数用法详解
2020/01/28 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
Python使用xpath实现图片爬取
2020/09/16 Python
韩国现代百货官网:Hmall
2018/03/21 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
项目考察欢迎辞
2014/01/17 职场文书
2014年后勤工作总结
2014/11/18 职场文书
捐资助学感谢信
2015/01/21 职场文书
结婚老公保证书
2015/02/26 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技