淺談JS運(yùn)算符&&和|| 及其優(yōu)先級
今天看了一段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"));
直接瘋掉了,估計(jì)一下子沒幾個(gè)人能看懂。那么就把他“翻譯”一下。
&& (邏輯與)
這里主要是一個(gè)“&&”運(yùn)算,首先要搞懂這個(gè),看一個(gè)簡單的例子:
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);
嘿嘿,寫法很奇怪,運(yùn)行的結(jié)果是3,0,0。一般我們在if語句中經(jīng)常用到?!?amp;&” (邏輯與) 運(yùn)算和“||”運(yùn)算真好相反,“&&” 運(yùn)算遇到false就返回。
例如: a && b ,如果 a 為true,直接返回b,而不管b為true或者false 。如果 a 為false 那么直接返回a,上面例子中第一個(gè)var a = 1 && 2 && 3;因?yàn)? && 2,1為真,返回2;2&&3, 2為真,返回3 。
搞懂了“&&” 運(yùn)算,再來看最上的面的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"); }
說來慚愧,年紀(jì)大了,足足“翻譯”了半個(gè)小時(shí),還是在同事的幫助下才“翻譯”正確。
||(邏輯或)
再來看看“||”(邏輯或)運(yùn)算,看例子:
1 var a = 0 || 1 || 2;//1
2 var b = 1 || 0 || 3;//1
3 alert(a),alert(b);
“||”運(yùn)算遇到true就返回。例如:a || b ,如果 a 為false,直接返回b,而不管b為true或者false 。如果 a 為true,直接返回a,而不會(huì)繼續(xù)往下執(zhí)行。
&& (邏輯與) 和||(邏輯或)混合使用的時(shí)候要注意他們的優(yōu)先級:
&& (邏輯與) 優(yōu)先級高于||(邏輯或)
return a && b || c ,
根據(jù)a來判斷返回值,a 是 false 則肯定返回 c;如果 b , c 都是 true ,那么我們就可以根據(jù) a 來決定b 還是 c ,如果 a 是 false 則返回 c,如果a是true 則返回 b。
return a || b && c
根據(jù)優(yōu)先級相當(dāng)于先算 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運(yùn)算符優(yōu)先級(從高到低列出)
運(yùn)算符 | 描述 |
. [] () | 字段訪問、數(shù)組下標(biāo)、函數(shù)調(diào)用以及表達(dá)式分組 |
++ -- - ~ ! delete new typeof void | 一元運(yùn)算符、返回?cái)?shù)據(jù)類型、對象創(chuàng)建、未定義值 |
* / % | 乘法、除法、取模 |
+ - + | 加法、減法、字符串連接 |
<< >> >>> | 移位 |
< <= > >= instanceof | 小于、小于等于、大于、大于等于、instanceof |
== != === !== | 等于、不等于、嚴(yán)格相等、非嚴(yán)格相等 |
& | 按位與 |
^ | 按位異或 |
| | 按位或 |
&& | 邏輯與 |
|| | 邏輯或 |
?: | 條件 |
= oP= | 賦值、運(yùn)算賦值 |
, | 多重求值 |
以上這篇淺談JS運(yùn)算符&&和|| 及其優(yōu)先級就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
webpack4實(shí)現(xiàn)不同的導(dǎo)出類型
這篇文章主要介紹了webpack4實(shí)現(xiàn)不同的導(dǎo)出類型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04JS判斷頁面加載狀態(tài)以及添加遮罩和緩沖動(dòng)畫的代碼
JS判斷頁面加載狀態(tài)以及添加遮罩和緩沖動(dòng)畫的代碼廢話少說,直接貼代碼!有注釋2012-10-10封裝html的select標(biāo)簽的js操作實(shí)例
本文將為大家介紹下正如標(biāo)題所示的select操作:清空所有的選項(xiàng)、添加一個(gè)選項(xiàng)、根據(jù)值、選中一個(gè)選項(xiàng)、根據(jù)下標(biāo),選中一個(gè)選項(xiàng),感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07JavaScript動(dòng)態(tài)添加事件之事件委托
動(dòng)態(tài)添加事件實(shí)質(zhì)就是指js中的事件委托。本文給大家介紹JavaScript動(dòng)態(tài)添加事件之事件委托的相關(guān)知識,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07如何在CocosCreator中使用http和WebSocket
這篇文章主要介紹了在Cocos Creator中使用的Http和WebSocket,對websocket感興趣的同學(xué),一定要看下2021-04-04