不少學習 JavaScript的人,容易被 JavaScript 的邏輯運算符的運算規則搞暈。爲何呢?由於
JavaScript的邏輯運算符和其餘語言(好比:java、c#、c等)有着很大的不一樣。其餘那些強類型的語言的
邏輯運算符參數運算的都是true或false,結果也必定是true或false,很容器理解和記住。而JavaScript
的"邏輯運算符"參與運算的能夠是任意類型,結果也多是任意類型,規則及其複雜。因此,JavaScript中,
他們已經不是真正的"邏輯運算符"了,因此我纔給他們打上引號。
首先說一下,其餘數據類型轉換爲布爾類型的規則:
null、undefined、0、NaN、空字符串轉換爲false,其餘轉化爲true。
javascript中有三種邏輯運算符:javascript
1. 取反 !
首先把數據轉化爲布爾值,而後取反,結果爲true或falsejava
<script type="text/javascript"> var a = [1,2,3]; var b = "hello"; var obj = new Object(); var d; console.log(!""); console.log(!d); console.log(!a); console.log(!b); console.log(!obj); </script>
結果:
2. 邏輯與 &&
js中邏輯與和其餘語言不太同樣,若是第一個操做數是true(或者可以轉爲true),計算結果就是第二個操做數,若是第一個操做數是false,結果就是false(短路計算),對於一些特殊數值不遵循以上規則.c#
<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,結果就是第一個操做數spa
<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>