JavaScript邏輯and、or、not運算符詳解


一、AND詳解:

  在JavaScript中,邏輯 AND 運算符用雙和號(&&)表示。

  需要說明的是:邏輯AND運算的運算數可以是任何類型的,不止是Boolean值,如果某個運算數不是原始的Boolean型值,邏輯AND運算並不一定返回Boolean值

  邏輯AND運算符的運算行為如下:

  1. 如果一個運算數是對象,另一個是 Boolean 值,返回該對象。
  2. 如果兩個運算數都是對象,返回第二個對象。
  3. 如果某個運算數是 null,返回 null。
  4. 如果某個運算數是 NaN,返回 NaN。
  5. 如果某個運算數是 undefined,發生錯誤。
  6. 如果兩個運算數都是boolean類型,則返回boolean值

  與Java中的邏輯AND運算相似,JavaScript 中的邏輯AND運算也是簡便運算,即如果第一個運算數決定了結果,就不再計算第二個運算數:即俗稱的“短路規則”對於邏輯AND運算來說,如果第一個運算數是false,那么無論第二個運算數的值是什么,結果都不可能等於true。

  考慮下面的例子:

var bTrue = true; var bResult = (bTrue && bUnknown); //發生錯誤
alert(bResult); //這一行不會執行

  這段代碼在進行邏輯 AND 運算時將引發錯誤,因為變量 bUnknown 是未定義的。變量 bTrue 的值為 true,因為邏輯 AND 運算將繼續計算變量 bUnknown。這樣做就會引發錯誤,因為 bUnknown 的值是 undefined,不能用於邏輯 AND 運算。如果修改這個例子,把第一個數設為 false,那么就不會發生錯誤:

var bTrue = false; var bResult = (bTrue && bUnknown); //不會發生錯誤
alert("bTrue && bUnknown的結果是:"+(bResult));//輸出 "false"

  在這段代碼中,腳本將輸出邏輯AND運算返回的值,即字符串"false"。即使變量 bUnknown 的值為 undefined,它也不會被計算,因為第一個運算數的值是 false。

驗證JavaScript邏輯And運算符的運算行為

<script type="text/javascript"> document.write("驗證JavaScript邏輯And運算符的運算行為:"); document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); var bTrue = true; var bFalse = false; var bResult = bTrue && bFalse; /*1.如果兩個運算數都是boolean類型,則返回boolean值*/ document.write("1.如果兩個運算數都是boolean類型,則返回boolean值"); document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); document.write("bTrue = true,bFalse = false,bTrue && bFalse的結果是:"+(bResult));//結果為false
    document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); var obj = new Object(); /*2.如果一個運算數是對象,另一個是 Boolean 值,返回該對象*/ document.write("2.如果一個運算數是對象,另一個是 Boolean 值,返回該對象"); document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); document.write("obj是一個對象,true&&obj的結果是:"+(true && obj));//返回obj該對象 document.write("<br/>"); document.write("obj==true&&obj的結果是:"+(obj == (true && obj)));//判斷obj與該對象相等,為true document.write("<br/>"); document.write("false&&obj的結果是:"+(false && obj));//不執行后面,為false document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); /*3.如果兩個運算數都是對象,返回第二個對象。*/
    var obj1 = new Object(); var obj2 = new Object(); document.write("3.如果兩個運算數都是對象,返回第二個對象。"); document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); document.write("obj1是一個對象,obj2是一個對象,obj1==(obj1&&obj2)的結果是:"+(obj1 == (obj1 && obj2)));//obj1不等於obj2,結果為false
    document.write("<br/>"); document.write("obj1是一個對象,obj2是一個對象,obj2==(obj1&&obj2)的結果是:"+(obj2 == (obj1 && obj2)));//obj2等於obj2,結果為true
    document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); /*4.如果某個運算數是 null,返回null。*/
    var a = null; var b = true; document.write("4.如果某個運算數是 null,返回null。"); document.write("<br/>"); document.write("a=null,b=true,a&&b的結果是:"+( a && b )); document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); /*5.如果某個運算數是NaN,返回NaN*/
     var c = NaN; var d = "str"; document.write("5.如果某個運算數是NaN,返回NaN"); document.write("<br/>"); document.write("c=NaN,d=str,c&&d的結果是:"+( c && d)); document.write("<br/>"); document.write("-----------------------------------------------------------------------------"); document.write("<br/>"); /* 6.JavaScript中的邏輯 AND 運算是簡便運算,即如果第一個運算數決定了結果,就不再計算第二個運算數。 對於邏輯 AND 運算來說,如果第一個運算數是 false,那么無論第二個運算數的值是什么,結果都不可能等於 true。 */
    var bFalse = false; var bResult = (bFalse && bUnknown); document.write("6.JavaScript中的邏輯 AND 運算是簡便運算,即如果第一個運算數決定了結果,就不再計算第二個運算數"); document.write("<br/>"); document.write("對於邏輯 AND 運算來說,如果第一個運算數是 false,那么無論第二個運算數的值是什么,結果都不可能等於 true。"); document.write("<br/>"); document.write("bFalse=false,bUnknown是一個未定義的變量,bFalse && bUnknown的結果是:"+(bResult)); //輸出 "false"

    var bTrue = true; var bResult = (bTrue && bUnknown);    //發生錯誤
    alert(bResult);            //這一行不會執行
  </script>

 二、OR詳解:

  JavaScript的邏輯 OR 運算也是簡便運算,對於邏輯 OR 運算符來說,如果第一個運算數值為 true,就不再計算第二個運算數,如果某個運算數不是 Boolean 值,邏輯 OR 運算並不一定返回 Boolean 值,邏輯||的運算規則如下:

  1. 如果一個運算數是對象,另一個是 Boolean 值,返回該對象。
  2. 如果兩個運算數都是對象,返回第一個對象。(and是返回第二個對象)
  3. 如果某個運算數是 null,返回 null。
  4. 如果某個運算數是 NaN,返回 NaN。
  5. 如果某個運算數是 undefined,發生錯誤。

三、NOT詳解:

  在JavaScript 中,邏輯NOT運算符與C和Java中的邏輯 NOT 運算符相同,都由感嘆號(!)表示。與邏輯 OR 和邏輯 AND 運算符不同的是,邏輯 NOT 運算符返回的一定是 Boolean 值

邏輯 NOT 運算符的行為如下:

  • 如果運算數是對象,返回 false
  • 如果運算數是數字 0,返回 true
  • 如果運算數是 0 以外的任何數字,返回 false
  • 如果運算數是 null,返回 true
  • 如果運算數是 NaN,返回 true
  • 如果運算數是 undefined,發生錯誤
<script type="text/javascript">
     var bFalse = false;//運算數是bool類型的數
     var sRed = "red";//運算數是字符串
     var iZero = 0;//運算數是0
     var iThreeFourFive = 345;//運算數是 0 以外的任何數字
     var oObject = new Object();//對象
     var oNull=null;//運算數是null
     var oUndefined;//運算數是undifined
     var oNaN=parseInt("abc");//使用parseInt方法把嘗試字符串abc轉換成整數,因為abc不是數字,因此是轉不了的,所以返回的結果就是NaN
    
     /* writeln() 方法與 write() 方法幾乎一樣,差別僅在於是前者將在所提供的任何字符串后添加一個換行符。在HTML中,這通常只會在后面產生一個空格; 不過如果使用了 <PRE> 和 <XMP> 標識,這個換行符會被解釋,且在瀏覽器中顯示。 */ document.writeln("<XMP>"); document.writeln("oNaN=parseInt(\"abc\")返回的結果是"+oNaN);//NaN
    document.writeln("bool類型的數false與!運算符運算之后的結果是:" + (!bFalse));//true
    document.writeln("字符串sRed與!運算符運算之后的結果是: " + (!sRed));//false
    document.writeln("數字0與!運算符運算之后的結果是:" + (!iZero));//如果運算數是數字 0,返回 true 
    document.writeln("數字345與!運算符運算之后的結果是:" + (!iThreeFourFive));//如果運算數是 0 以外的任何數字,返回 false 
    document.writeln("對象oObject與!運算符運算之后的結果是:" + (!oObject));//如果運算數是對象,返回 false 
    document.writeln("NaN與!運算符運算之后的結果是:" + (!oNaN));//如果運算數是NaN,返回 true 
    document.writeln("null與!運算符運算之后的結果是:" + (!oNull));//如果運算數是 null,返回 true 
    document.writeln("undifined與!運算符運算之后的結果是:" + (!oUndefined));//有定義,表示值是"undefined",返回 true //document.writeln("未定義的字符串sBule與!運算符運算之后的結果是:" + (!sBule));//sBule前面沒有定義,也就是sBule運算數是 undefined,因此這里發生錯誤 
    document.writeln("</XMP>"); </script>

  判斷JavaScript變量的Boolean 值時,也可以使用邏輯NOT運算符。這樣做需要在一行代碼中使用兩個 NOT 運算符。無論運算數是什么類型,第一個NOT運算符返回 Boolean值,第二個NOT將對該Boolean值取反,從而給出變量真正的Boolean值。使用not運算符判斷JavaScript變量的Boolean值是一個非常有用的技巧,只要知道了變量的boolean值,那么當使用變量進行 && 或者 || 運算時,就可以很快知道運算的結果了

<script type="text/javascript">
     var bFalse = false;//運算數是bool類型的數
     var sRed = "red";//運算數是字符串
     var iZero = 0;//運算數是0
     var iThreeFourFive = 345;//運算數是 0 以外的任何數字
     var oObject = new Object();//對象
     var oNull=null;//運算數是null
     var oUndefined;//運算數是undifined
     var oNaN=parseInt("abc");//使用parseInt方法把嘗試字符串abc轉換成整數,因為abc不是數字,因此是轉不了的,所以返回的結果就是NaN
    /* 判斷JavaScript 變量的 Boolean 值時,也可以使用邏輯 NOT 運算符。這樣做需要在一行代碼中使用兩個 NOT 運算符。 無論運算數是什么類型,第一個 NOT 運算符返回 Boolean 值。第二個 NOT 將對該 Boolean 值取反,從而給出變量真正的 Boolean 值。 */ document.write("<PRE>"); document.writeln("布爾數false 的邏輯值是 " + (!!bFalse)); document.writeln("字符串sRed 的邏輯值是 " + (!!sRed)); document.writeln("數字0 的邏輯值是 " + (!!iZero)); document.writeln("數字345 的邏輯值是 " + (!!iThreeFourFive)); document.writeln("對象Object 的邏輯值是 " + (!!oObject)); document.writeln("NaN的邏輯值是 :" + (!!oNaN)); document.writeln("null 的邏輯值是 " + (!!oNull)); document.writeln("undefined 的邏輯值是 " + (!!oUndefined)); document.write("</PRE>"); </script>


免責聲明!

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



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