js中的 與或運算順序 (包含例子)

今天在網上查了js的&&和||的相關文章,感覺現在很多人看文章都缺少驗證的思想。接下來我來講一下我對&&和||的瞭解,以及貼上對應的demo。

首先確認以下幾點:&&與||的執行優先級是一樣的,不論有多少的混用都是從左到右執行,同時需要注意短路特性
1、JS中的&&符號:
短路 與:A && B
1.1 如果A爲false,表達式返回A (這個就是短路特性,提前結束)
1.2 如果A爲true,表達式返回B
結論:一假即假(顧名思義,“且” 肯定是 A 且 B同時爲真,結果才爲真)

下面來些demo

0 && 1  // 結果 0   原因見 1.1
1 && 0  // 結果 0   原因見 1.2
1 && 2  // 結果 2   原因見 1.2

2、JS中的||符號:
|| 短路 或:A || B
2.1 如果A爲true,表達式返回A (這個就是短路特性,提前結束)
2.2 如果A爲false,表達式返回B
結論:一真即真(顧名思義,“或“ 只要 A 或 B有一個爲真,結果就爲真)

下面來些demo

1 || 0 // 結果 1  原因見 2.1
0 || 2 // 結果 2  原因見 2.2

對於一個符號的話都比較好理解,對於兩個符號混用的也是同樣的道理

1 && 3 || 0 && 4  // 結果是 3

很多分析:先執行1&&3 返回3,再執行0&&4返回0,最後執行結果比較 3||0 返回 3,這個過程是不對的,其實正確的執行順序應該是遵循短路特性,具體過程如下:

第1步:先執行1&&3 因爲,1爲真,沒有提前短路,返回3
第2步:再執行3 || 0 ,這時候3 || 0的時候,因爲 || 的第一個是3,
      提前結束,所以返回3,其實是沒有執行 0 && 4的。

接下來用一個demo來驗證一下:
備註: 爲了驗證,我們把原先 a 改成 (console.log(“run a”), a),這裏用的了 運算符 “,” 這個運算符是取最後一個的值,所以等價。

(console.log("run 1"), 1) && (console.log("run 3"), 3) || (console.log("run 0"), 0) && (console.log("run 4"), 4)

在這裏插入圖片描述
上面的結果驗證了我們的猜想。

其實 && 和 || 很簡單,只要知道它們每個返回結果,以及短路特性,就可以算出最後的結果。

&& 和 || 除了判斷結果之外,還能給變量賦值默認值的作用
eg:
a = a || “默認值”;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章