致謝
首先說一下,其他資料型別轉換為布林型別的規則: 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>