浅谈JS运算符&&和|| 及其优先级
今天看了一段YUIcompressor压缩的js代码:
userNum&&(ind+=index,ind>=userNum&&(ind-=userNum),ind<0&&(ind===-2&&(ind=-1),ind+=userNum),selLi.removeClass("on"),$(selLi[ind]).addClass("on"));
直接疯掉了,估计一下子没几个人能看懂。那么就把他“翻译”一下。
&&(逻辑与)
这里主要是一个“&&”运算,首先要搞懂这个,看一个简单的例子:
1vara=1&&2&&3;//3
2varb=0&&1&&2;//0
3varc=1&&0 &&2;//0
4alert(a),alert(b),alert(c);
嘿嘿,写法很奇怪,运行的结果是3,0,0。一般我们在if语句中经常用到。“&&”(逻辑与)运算和“||”运算真好相反,“&&”运算遇到false就返回。
例如:a&&b,如果a为true,直接返回b,而不管b为true或者false。如果a为false那么直接返回a,上面例子中第一个vara=1&&2&&3;因为1&&2,1为真,返回2;2&&3,2为真,返回3。
搞懂了“&&”运算,再来看最上的面的YUIcompressor压缩的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"); }
说来惭愧,年纪大了,足足“翻译”了半个小时,还是在同事的帮助下才“翻译”正确。
||(逻辑或)
再来看看“||”(逻辑或)运算,看例子:
1vara=0||1||2;//1
2varb=1||0||3;//1
3alert(a),alert(b);
“||”运算遇到true就返回。例如:a||b,如果a为false,直接返回b,而不管b为true或者false。如果a为true,直接返回a,而不会继续往下执行。
&&(逻辑与)和||(逻辑或)混合使用的时候要注意他们的优先级:
&&(逻辑与)优先级高于||(逻辑或)
returna&&b||c,
根据a来判断返回值,a是false则肯定返回c;如果b,c都是true,那么我们就可以根据a来决定b还是c,如果a是false则返回c,如果a是true则返回b。
returna||b&&c
根据优先级相当于先算b&&c,然后和a相或;如果a是true,则返回a,不论是b或c,如果a是false,则如果b是false,返回b,如果b是true,返回c;
1vara=3 && 0||2; //2
3varb=3||0 && 2;//3
5varc=0||2&&3;//3
6alert(a),alert(b),alert(c);
另附:JS运算符优先级(从高到低列出)
以上这篇浅谈JS运算符&&和||及其优先级就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。