var result = true && false;spa
真值表:對象
邏輯與操做符能夠應用於任何類型的操做數,而不單單是布爾值。在有一個操做數不是布爾值的狀況下,邏輯與操做就不必定返回布爾值;此時,他遵循下列規則:變量
1.若是第一個操做數是對象,則返回第二個操做數;im
2.若是第二個操做數是對象,則只有在第一個操做數的求值結果是true的狀況下才會返回該對象;img
3.若是兩個操做數都是對象,則返回第二個操做數;錯誤
4.若是一個操做數是null,則返回null;ab
5.若是有一個操做數是NAN,則返回NAN;undefined
6.若是有一個操做數是undefined,則返回undefined。
邏輯與操做屬於短路操做,即若是第一個數可以決定結果,那麼就不會再對第二個操做數求值。對於邏輯與而言,若是第一個操做數是false,則不管第二個操做數是什麼值,結果都再也不多是true了。
看例子:
var found = true;
var result = ( found && someUndefinedVariable ); //這裏會發生錯誤
alert( result ); //這一行不會執行
在上面的代碼中,當執行邏輯與操做時會發生錯誤,由於變量someUndefinedVariable沒有聲明。因爲變量found的值是true,因此邏輯與操做符會繼續對變量someUndefinedVariable求值。但someUndefinedVariable還沒有定義,所以就會致使錯誤。這說明不能在邏輯與操做中是要未定義的值。若是像下面這個例子中同樣,講found的值設置爲false,就不會發生錯誤了。
var found = false;
var result = ( found && someUndefinedVariable ); //不會發生錯誤
alert( result ); //會執行("false")
在這個例子中,警告框會顯示出來。不管變量someUndefinedVariable有沒有定義,也永遠不會對他求值,由於第一個操做數的值是false。而這也就意味着邏輯與操做的結果一定是false,根本用不着再對&&右側的操做數求值了。