深刻理解JS中邏輯或(||)和邏輯與(&&)

先來看一個關於邏輯或的例子:javascript

var b = 0
var a = b++ || b++
console.log(b)      // 2
var c = ++b || ++b
console.log(a)      // 1
console.log(c)      // 3
console.log(b)      // 3
關於 ++b和b++的區別,後++的運算等級沒有賦值運算符(=)高, 這裏再也不做過多的解釋,

首先從全局來看,關於的b的運算總共執行了4次,每次都自身+1,那麼按道理來講,若是這些運算都執行了,b的最後的值正常來講應該是4,那爲何最後的結果是3呢?java

關於邏輯或(||) 我本身總結以下:

①、首先 若是第一項的值不是Boolean值的話,會轉爲Boolean類型的,在數值上,0和-0在轉爲Boolean時爲false,其他爲true,在其餘值上諸如null,undefined,NaN,空string類型等會轉爲false,能夠本身嘗試一下
console.log(Boolean(NaN))                 // false
console.log(Boolean(null))                // false
console.log(Boolean(undefined))           // false
console.log(Boolean(''))                  // false
console.log(Boolean(' 0'))                // true
②、若是第一項的值爲true時, 則後面一項則不執行,返回的是第一項執行運算後的值
網上看到的是說若是第一項爲true,返回的也是true,這是不對的說法。

③、若是第一項的值爲false時, 則執行後面一項的運算,返回的是第二項執行運算後的值
再來看多一個例子,本身多動手嘗試看看就明白了。
var b = 0
var a = (typeof b++) || b++
console.log(b)               //1        
var c = ++b || ++b
console.log(a)               // number   
console.log(c)               // 2        
console.log(b)               // 2

--------------------------     來個分割線      ----------------------------------
看一個關於邏輯與的例子code

var b = 0
var a = (typeof b++) && b++ 
console.log(b)                // 2
var c = ++b && ++b
console.log(a)                // 1
console.log(c)                // 4
console.log(b)                // 4

關於邏輯與(&&) 我本身總結以下:

①、邏輯與和邏輯或同樣,都須要把先後兩項進行Boolean轉換再比較
②、若是第一項的值爲true時, 則執行後面一項的運算,返回的是第二項執行運算後的值
③、若是第一項的值爲false時, 則後面一項則不執行,返回的是第一項執行運算後的值
相關文章
相關標籤/搜索