先從兩個問題看起:
第一個問題為什麼a && b 回傳的是true,b && a 回傳的是6
1 var user = 6;2 var both = true;3 4 console.log( user && both); //true5 console.log( both && user); //6
第二個問題both進行自減 最後印刷的依舊是3
1 var user = false;2 var both = 3;3 4 console.log( user && both--); // false5 console.log(both); // 3
先從三個層次來理解(以&&為例說明):
第一層理解:操作數都是布林值的時候,只有二者都為true的時候,結果才會是true,否則為false。
第二層理解:&&可以對真值和假值運算,如果兩個都是真值,則傳回一個真值,否則傳回一個假值。但是,真值並不僅限於true,假值也不僅限於false,下面這些值會被轉換成false(其他所有值都為true)
undefined
null
0/-0
NaN
" "
在js中,進行&&操作,結果不總是true和false,而是當前的值。目前的值有可能就是數值、字串等。
如果第一個表達式為真,那麼就以第二個表達式的值作為其結果,這個結果不是轉換之後的值,而是它本身。
如果第一個表達式為假,那麼就以第一個表達式的值作為其結果,這個結果不是轉換之後的值,而是它本身。
user = 6 both = math = 0 console.log( user && both); console.log( both && user); console.log( both && math); console.log( math && both);
第三層理解:短路運算,運算過程,首先計算左操作數的值,如果計算結果為假值,則整個表達式結果就為假值,也就是左操作數的值同時停止右操作數的求值。如果左操作數的結果為真值,則整個結果依賴右操作數的值。
關於短路運算的說明:
在&&和||運算時,如果第一個表達式的值就已經能夠確定整個運算的結果,那麼第二個表達式將不會執行
對於&&運算而言第一個表達式的值為假值那就決定了整個運算結果為假值所以第一個表達式不會執行所以y-- 並沒有執行y的值仍是3
x = y = 3 console.log(x && y--); console.log(y);
對於||而言,
如果第一個表達式的值為真值,結果就是第一個表達式的值,不是轉換之後的,而是它本身。
如果第一個表達式的值為假值,結果就是第二個表達式的值,不是轉換之後的,而是它本身。
1 var user = true;2 var both = 10;3 4 console.log(user || ++both); //true5 console.log(both); //10
&& 與 || 有完全相同的原理,只是運算規則不太一樣。
1 var a = 10;2 var b = true;3 var c = 0;4 5 console.log(a || b); //106 console.log(b || a); //true7 8 console.log(b || c); //true9 console.log(c || b); //true
以上是深入理解js中&&與||實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!