徹底理解js中的&&和||


javascript中,&&和||的用法比較神奇,經常用在對象上,例如a || b,如果a不存在,則返回b。a && b,如果a存在,則返回b,否則返回a。

光這樣看,感覺他的概念還挺復雜的,這樣去想的話,不但會在腦子里多出一個無用的概念,而且越記越混亂。看問題還是要看本質。

 

本質是什么呢?&& 和 || 的作用只有一個(定義):

進行布爾值的且和或的運算。當運算到某一個變量就得出最終結果之后,就返回哪個變量。

 

在javascript中:

以下內容會被當成false處理:"" , false , 0 , null , undefined , NaN

其他都是true。注意:字符串"false"也會被當做true處理,在未轉型的情況下他是字符串,屬於一個對象,所以是true。

 

所以:

a || b:如果a是true,那么b不管是true還是false,都返回true。因此不用判斷b了,這個時候剛好判斷到a,因此返回a。

   如果a是false,那么就要判斷b,如果b是true,那么返回true,如果b是false,返回false,其實不就是返回b了嗎。

a && b:如果a是false,那么b不管是true還是false,都返回false,因此不用判斷b了,這個時候剛好判斷到a,因此返回a。

   如果a是true,那么就要在判斷b,和剛剛一樣,不管b是true是false,都返回b。

 

來個復雜的例子(注意一點:在js中&&運算符優先級大於||)

假設:

 var a=new Object(),b=0,c=Number.NaN,d=1,e="Hello"; 

  alert(a || b && c || d && e);  表達式從左往右執行,先&&后||

    1、(b && c):b是false,此時不需要判斷c,因為不管c是true是false,最終結果一定是false,因此返回當前判斷對象b,也就是0;

    2、(d && e):d是true,這個時候判斷e,此時不管e是true,是false,返回結果一定是e,e為true,因此返回"Hello";

    3、(a || b):a是true,此時不管b是true是false,結果都是true,所以不判斷b,所以返回當前判斷對象a,因此返回new Object();

    4、(a || e):同上,因此返回a。

這個表達式最終結果為a,也就是new Object()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM