完全理解js中的&&和||

本文連接:http://www.javashuo.com/article/p-kiswbpou-hg.htmljavascript

閱讀代碼時對一行代碼很困惑html

step > max_step && (step = min_step);java

查閱資料後發現它等價於spa

if (step > max_step) {htm

     step = min_step;對象

}blog

 

js中的&&和||本質是什麼呢?ip

&& 和 || 的做用只有一個(定義):字符串

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

 

在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);  表達式從左往右執行,先&&後||

    一、(b && c):b是false,此時不須要判斷c,由於無論c是true是false,最終結果必定是false,所以返回當前判斷對象b,也就是0;

    二、(d && e):d是true,這個時候判斷e,此時無論e是true,是false,返回結果必定是e,e爲true,所以返回"Hello";

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

    四、(a || e):同上,所以返回a。

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

 

結論:

a&& b :若是執行a後返回true,則執行b並返回b的值;若是執行a後返回false,則整個表達式返回a的值,b不執行;
a || b :若是執行a後返回true,則整個表達式返回a的值,b不執行;若是執行a後返回false,則執行b並返回b的值;
&& 優先級高於 ||;

閱讀代碼時對一行代碼很困惑

step > max_step && (step = min_step);

查閱資料後發現它等價於

if (step > max_step) {

     step = min_step;

}

 

js中的&&和||本質是什麼呢?

&& 和 || 的做用只有一個(定義):

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

 

在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);  表達式從左往右執行,先&&後||

    一、(b && c):b是false,此時不須要判斷c,由於無論c是true是false,最終結果必定是false,所以返回當前判斷對象b,也就是0;

    二、(d && e):d是true,這個時候判斷e,此時無論e是true,是false,返回結果必定是e,e爲true,所以返回"Hello";

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

    四、(a || e):同上,所以返回a。

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

 

結論:

a&& b :若是執行a後返回true,則執行b並返回b的值;若是執行a後返回false,則整個表達式返回a的值,b不執行;
a || b :若是執行a後返回true,則整個表達式返回a的值,b不執行;若是執行a後返回false,則執行b並返回b的值;
&& 優先級高於 ||;

相關文章
相關標籤/搜索