JS 邏輯運算符的特點


致謝

 

 

首先說一下,其他數據類型轉換為布爾類型的規則: 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>

這種寫法非常常見,有利於提高代碼的健壯性,例子如下:

const jobIds = row.jobId || this.ids;
 
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM