js邏輯與,或,非


【轉,未整理】

1、邏輯非(!)

  如果一個操作數是一個對象,返回true;

  如果一個操作數是一個空字符串,返回false;

  如果一個操作數是一個非空字符串,返回false;

  如果一個操作數是一個數值0,返回false;

  如果一個操作數是任意的非零字符,返回true;

  如果一個操作數是null,返回false;

  如果一個操作數是NaN,返回false;

  如果一個操作數是undefined,返回true;

 

2、邏輯與(&&)

  (1)對於布爾值,邏輯與是非常簡單的,只要有一個false,就返回false;

  (2)對於不是布爾值的情況則:

        如果第一個操作數是對象,則返回第二個數

        如果第二個操作數是對象,則只有在第一個操作數的求值結果為true的情況下才會返回該對象;

        如果第兩個操作數都是對象,則返回第二個數操作數

        如果有一個操作數是null,則返回null

        如果有一個操作數是NaN,則返回第NaN

        如果第一個操作數是undefined,則返回unfined

上面確實難記,舉例子來論證下會更方便記住

                   var obj={};   var a=(obj && null); alert(a) //null

                   var obj={};   var a=(null && obj); alert(a) //null

                   var obj={};   var a=(obj && undefined); alert(a) //undefined

                   var obj={};   var a=(undefined && obj); alert(a) //undefined

                   var obj={};   var a=(obj && NaN); alert(a) //NaN

                   var obj={};   var a=(NaN && obj ); alert(a) //NaN

                  var obj={};var obj2={} ;  var a=(obj && obj2); alert(a==obj2) //true

對於邏輯與的短路問題:

  舉例1

   <script type="text/javascript">

var found=true;var result=(found && someUdefinedVariable);alert(result);//顯示someUdefinedVariable
  //例子中的found為true,所以會對someUdefinedVariable繼續求值,但是該變量未定義,所以會提示錯誤

  </script>

舉例2

   <script type="text/javascript">

var found=false;var result=(found && someUdefinedVariable);alert(result);//顯示false
  //例子中的found為false,所以第一個操作數就已經能夠決定結果,就不會在對第二個操作數求值

  </script>

ps:對於邏輯與,如果第一個操作數十false,無論第二個操作數是什么,結果都不可能在世true

3、邏輯或(||)

      (1)對於布爾值,邏輯或是非常簡單的,只要有一個true,就返回true;

       (2)對於不是布爾值的情況則:

                 如果第一個操作數是對象,則返第一個操作數

                 如果第一個操作數的求值結果為false,則返回第二個操作數

                 如果兩個操作數都是對象,則返回第一個操作數

                 如果兩個操作數是null,則返回null

                 如果兩個操作數是NaN,則返回NaN

                 如果兩個操作數是undefined,則返回undefined 

例子1     

<script type="text/javascript">
          var found=true;
   var result=(found || someUdefinedVariable);
    alert(result);//彈出true

  //對於邏輯與,當一個為true的時候,就不會在對第二個操作數進行求職了
  </script>               

 


免責聲明!

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



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