先來看一個關於邏輯或的例子: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時, 則後面一項則不執行,返回的是第一項執行運算後的值