JS 邏輯運算子的特點

aaa111js發表於2022-03-01

致謝

 

 

首先說一下,其他資料型別轉換為布林型別的規則: null、undefined、0、NaN、空字串轉換為false,其他轉化為 true。

1. 取反 !

首先把資料轉化為布林值,然後取反,結果為 true 或 false。

<script type="text/javascript">
var a = [1,2,3];
var b = "hello";
var obj = new Object();
var d;

console.log(!"");   //true
console.log(!d);    //true
console.log(!a);    //false
console.log(!b);    //false
console.log(!obj);  //false
</script>

2. 邏輯與 &&

JavaScript 中邏輯與和其他語言不太一樣,如果第一個運算元是 true(或者能夠轉為 true),計算結果就是第二個運算元,如果第一個運算元是 false,結果就是 false(短路計算),對於一些特殊數值不遵循以上規則。(個人理解為:如果運算的第一個運算元為true,則返回第二個運算元,反之則返回第一個運算元)

<script type="text/javascript">
var a = [1,2,3];
var b = "hello";
var obj = new Object();
var d;

console.log(true && 10);            //第一個運算元是true,結果是第二個操作,也就是10
console.log(false && b);            //第一個運算元是false,結果flase
console.log(100 && false);          //第一個運算元是100,結果flase
console.log(undefined && false);    //第一個運算元是undefined,結果undefined
console.log(NaN && false);          //第一個運算元是NaN,結果NaN
console.log(null && false);         //第一個運算元是null,結果null
console.log('' && false);           //第一個運算元是空串,結果空串
console.log(0 && 100);              //結果是0
console.log(5 && 100);              //100
console.log(a && b);                //hello
console.log(obj && 200);            //200
</script>


3. 邏輯或 ||

如果第一個運算元不是 false,結果就是第一個運算元,否則結果是第二個運算元。如果第一個運算元能夠轉為 true,結果就是第一個運算元(個人理解為:如果運算的第一個運算元為 true,則返回第一個運算元,反之則返回第二個運算元)

<script type="text/javascript">
var a = [1,2,3];
var b = "hello";
var obj = new Object();
var d;

console.log(true || 10);        //第一個運算元是true,結果是第一個操作,也就是true
console.log(false || b);        //第一個運算元是false,結果是第二個運算元b
console.log(100 || false);      //第一個運算元是100,結果100
console.log(undefined || 9);    //第一個運算元是undefined轉false,結果9
console.log(NaN || false);      //第一個運算元是NaN轉false,結果第二個運算元
console.log(null || a);         //第一個運算元是null轉false,結果a
console.log('' || false);       //第一個運算元是空串轉false,結果第二運算元
console.log(0 || 100);          //結果是100
console.log(5 || 100);          //5
console.log(a || b);            //a
console.log(obj || 200);        //obj
</script>

相關文章