很多學習 JavaScript的人,容易被 JavaScript 的邏輯運算符的運算規則搞暈。為什麼呢?因為
JavaScript的邏輯運算符和其他語言(比如:java、c#、c等)有着很大的不同。
javascript中的邏輯運算符
首先說一下,其他資料類型轉換為布爾類型的規則:
null、undefined、0、NaN、空字元串轉換為false,其他轉化為true。
javascript中有三種邏輯運算符:
1.取反 !
首先把資料轉化為布爾值,然後取反,結果為true或false
<script type="text/javascript">
var str="hello world"
console.log(!null);//true
console.log(!str);//false
</script>
2.邏輯與 &&
js中邏輯與和其他語言不太一樣,如果第一個操作數是true(或者能夠轉為true),計算結果就是第二個操作數,如果第一個操作數是false,結果就是false(短路計算),對于一些特殊數值不遵循以上規則.(如果第一個操作數為特殊數值,則結果為特殊數值)
<script type="text/javascript">
var str="hello world";
var str1="";
var a;
var nll=null;
var obj=new Object();
console.log(true&&nll);
console.log(false&&nll);
console.log(nll&&true);//null -->第一個操作數為特殊數值,則結果為特殊數值
console.log(nll&&false);//null -->同上
console.log(str1&&true);//結果為空串
console.log(a&&true);//undefined
console.log(true&&str);//hello world
</script>
-
邏輯或 ||
如果第一個操作數不是false,結果就是第一個操作數,否則結果是第二個操作數。如果第一個操作數能夠轉為true,結果就是第一個操作數
<script type="text/javascript">
var str="hello world";
var str1="";
var a;
var nll=null;
var obj=new Object();
console.log(str||true);//hello world
console.log(false||str);//hello world
console.log(nll||false);//flase
console.log(false||nll);//null
console.log(obj||false);//{}
console.log(str1||false);//false
console.log(a||false);//false
console.log(false||a);//undefined
console.log(false||0);//false
console.log(0||true);//ture
console.log(NaN||true);//true
console.log(false||NaN);//false
</script>