浅谈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 相关文章推荐
Add Formatted Data to a Spreadsheet
Jun 12 Javascript
js刷新框架子页面的七种方法代码
Nov 20 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
Apr 15 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
Dec 07 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
Jun 12 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 Javascript
Node.js与Sails redis组件的使用教程
Feb 14 Javascript
Javascript 实现匿名递归的实例代码
May 25 Javascript
详解使用 Node.js 开发简单的脚手架工具
Jun 08 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python读取文本中的坐标方法
2018/10/14 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
物流专业求职计划书
2014/01/10 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
社区班子对照检查材料
2014/08/27 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
运动会开幕词
2015/01/28 职场文书
python 逐步回归算法
2021/04/06 Python
python调试工具Birdseye的使用教程
2021/05/25 Python