理解JS中 和 運算子

2021-06-26 14:28:44 字數 2444 閱讀 2944

話說js裡的 || 和 && 運算子一直對它都是雲裡霧裡, 雖然以前曾對它有過一些研究,但是時間久了,又未曾怎麼實踐,所以還是忘記了,最近這段時間拿起extjs框架裡的原始碼分析。 到處都是這種邏輯表示式, 所以決定再仔細研究一番。

一、先說 && 運算子

&&運算子 

從對其它語言的了解,表達的意思就是把多個邏輯條件連線起來確定真假,如果連線的條件有乙個為假,則返回假。 其實js裡的&&運算子也是這個意思。

在js裡,任何型別的值都可以轉換成邏輯布林值 如:

物件                 ==》 true

非空字串      ==》 true

非0數字           ==》 true

true                  ==》 true

""                     ==》 false

null                  ==》 false

undefined       ==》 false

false               ==》 false

nan                ==》 false

0                     ==》 false

例如:var a1 =   "aa";

var a2 =   "bb";

var a3 =   "cc";

var aa = a1 && a2 && a3;   //3個條件連線起來判斷真假,都為真 則返回最後乙個值。

alert(aa);  //返回a3

經過分析

如果3個條件都為真, 則返回第三個值

如果3個條件都為假, 則返回第乙個值, 由於短路演算法, 從左到右發現第乙個值為假,第二個值和第三個值都會被忽略。

如果只是其中乙個為假, 則返回假的那個值, 根據短路演算法,後面的值被忽略.

var aa = a1 && a2 && a3;

上面的邏輯其實表達的意思如下:

if(!a1)        a1沒有意義 返回a1

alert(a1);

else if(!a2)   a2也沒有意義 返回a2

alert(a2);

else if(!a3)  a3也沒有意義 返回a3

alert(a3);

else

alert(a3); //都有意義 返回 最後乙個a3

二、再說 ||  運算子

理解了前面的&&運算子,再來理解這個運算子就簡單多了,它表達的意思是,如果要使表示式有意義,從左到右只要發現有乙個有意義則整個表示式都有意義,並返回這個有意義的值,如果都是沒意義的值,則返回最後那個值。

var a1 =   null;

var a2 =   nan;

var a3 =  undefined;

var aa = a1 || a2 || a3;

alert(aa); //返回「undefined"

經過分析

如果其中3個條件都是真,則返回第乙個為真的值, 根據短路演算法, 第二個值和第三個值都會被忽略,因為第乙個值已經決定了結果。

如果只有其中乙個為真, 則返回為真的那個值. 後面的條件都將忽略。

var aa = a1 && a2 && a3;

如果用if來表示如下:

if(a1)

alert(a1);

else

else

alert(a3);

}js中經常用|| 運算子來做邏輯判斷。 如:

var a = false;

var b = [1,2,3];

var aa = a || b   //如果第乙個值沒有意義就返回第二個, 否則返回第乙個

表達的意思如下:

if(a == null)

alert(b);

else

alert(a);

其等價於c#裡的:

string a == null ? b : a

再區別一下如下的**:

var a = undefined;

var b =[1,2,3];

var c = (a==undefined) &&  b   //如果a沒有初始化,則用b來代替初始化

var d = a || b                                // 如果a等於false,則用b來代替

alert(c); //返回1,2,3

alert(d); //返回1,2,3

三、最後總結一下, && 和|| 運算子的區別:

1.兩者 都是計算連線條件的真假, 最後來確定值, 都是從false開始測試的。

2.對於&&  如果第乙個值是false 則整個表示式都是false 並返回第乙個值,後面的條件都將忽略。

3.對於||  如果第乙個值是false 則它會繼續看後面的條件是否為真,直到找到真值就立即返回,如果到最後也沒找到真值,則返回最後乙個值。

java 中 和 運算子

先看一段程式的執行結果 public class test 結果 false 除0異常 1 和 都可作為邏輯與運算子,不過 還可作為位運算子。2 什麼情況下作為邏輯運算子,什麼情況下作位運算子?答案是 的兩則是boolean型別的做邏輯運算子 兩側不是boolean型別做位運算子。3 由上面的程式也...

JS運算子 算術運算子 比較運算子 賦值運算子

兩邊的變數都是number型別 則是單純的加法運算 當字串出現時 結果是字串型別 字串之後的內容 不論什麼型別 都會被作為字串進行拼接 例子 var num1 10 var num2 20 num num1 num2 var result num1 num2 num1 false console.l...

JS按位非 運算子與 運算子的理解

其實是一種利用符號進行的型別轉換,轉換成數字型別 true 1 false 0 0 0 undefined 0 undefined 1 null 0 null 1 按位非運算子,簡單的理解就是改變運算數的符號並減去1,當然,這是只是簡單的理解能轉換成number型別的資料 那麼,對於typeof v...