講講js中的邏輯與(&&)以及邏輯或(||)


前幾天看到一個函數,百思不得其解,今天早上醒來看了本js的書,正好講到操作符的用法,給大家分享下js中的&&,||,和我們用的其他的編程語言還是有點區別的。

直接上那個函數的代碼:

function whatDoesItDo(mood){
    
    return mood && "I like this" || "I don't like this";
 
}

當我們給mood賦值true其顯示"I like this"(A來代替) 賦值false 顯示"I dont like this"(B來代替),或者我們給mood 賦值個字符串,其也會顯示 A,按理說應該返回true或者false,真是不明白,看了書才明白

邏輯與(&&)操作可以應用於任何的操作類型,不僅僅是布爾值,在有一個操作數不是布爾值的情況下,&&操作符就不一定返回布爾值:遵循下面規則:

以A&&B為例:

1如果第一個操作數是對象則返回第二個操作數,如果A是對象就返回B,

2,如果第二個操作數是對象,則只有在 第一個操作數求值為true的情況下才會返回該對象

&&操作屬於短路操作,只要第一個操作數能夠決定結果就不再操作第二個操作數了,所以第一個函數因為前面是個false,因為已經可以決定結果就是false,不再操作dd了,即使其未定義,第二個函數因為第一個操作數是true不能決定結果,所以會繼續操作dd,發現dd未定義,這就會報錯,第三個函數,以為第一個操作數是true也是個對象,所以遵照第一條,返回"dd"

3,如果兩個都是對象返回第二個

4,如果有一個是null,則返回null

"dd"&&null 返回null;false&&null;返回false,因為第一個已經決定結果,所以不再執行下一個操作數

5,如果有一個是NaN,則返回NaN

6,如果有一個操作數為undefined就返回undefined

邏輯或(||)和邏輯與的操作相類似,只要有一個不是布爾值,||也不一定返回布爾值,遵循下面規則:

1,如果是第一個是對象就返回第一個,下面我們就很容易理解開頭那個函數怎么回事了,如果mood是一個對象的話,首先&&操作返回“I like this”,然后進行||操作,因為(mood&&"Iike this")是對象,所以再進行||,就返回mood&&"Iike this",所以結果為"I like this".

2,如果第一個求值的結果是false,則返回第二個操作數

啥都不說了自己看吧

3,如果兩個操作數都是對象,返回第一個

4,如果都是null,NaN,undefined,則返回null,NaN,undefined;

對於A||B,如果A為true則不會操作B,如果A為false則會繼續操作B

對於null的操作,

var C=A||B,

如果A為null,則返回B,如果A不為null,直接返回A,B起到一個后備的作用;

歡迎大家關注我討論js問題我是Rhino 

 


免責聲明!

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



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