深入理解JS中邏輯或( )和邏輯與( )

2021-09-13 02:27:10 字數 1968 閱讀 7308

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

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呢?

①、首先如果第一項的值不是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

--------------------------     來個分割線      ----------------------------------

看乙個關於邏輯與的例子

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時,則後面一項則不執行,返回的是第一項執行運算後的值

js中的邏輯與( )和邏輯或( )

結果為true時 取最後一項的值 結果為false時 去第乙個為false的值 結果為true時 取 第乙個為true的值 結果為false時 取最後一項的值 var aa 1 2 3 4 4 整個表示式為true 返回 最後一項 var bb 1 2 null undefined 4 null 整...

js中的邏輯與( )和邏輯或( )

發布者 博主 在2014年9月13日 在js中寫出如下的答案 var a 2 var b 3 var andflag a b var orflag a b 問andflag 和orflag 分別是什麼?起初我認為 andflag 和orflag 的值都為 true 畢竟 和 都是求boolean 後...

js中的邏輯與( )和邏輯或( )

之前有乙個同事去面試,面試過程中碰到這樣乙個問題 在js中寫出如下的答案 var a 2 var b 3 var andflag a b var orflag a b 問andflag 和orflag 分別是什麼?起初我認為 andflag 和orflag 的值都為 true 畢竟 和 都是求boo...