js逻辑与或非

1、逻辑与(&&)

(1)对于布尔值,只有都为true才返回true,只要有一个false,就返回false;

(2)对于不是布尔值的情况则:

  • 如果第一个操作数是对象,则返回第二个数
  • 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象。
  • 如果两个操作数都是对象,则返回第二个数操作数。 
  • 如果有一个操作数是null,则返回null。 
  • 如果有一个操作数是NaN,则返回第NaN。
  • 如果第一个操作数是undefined,则返回undefined。 

     var obj={};   

     console.log(obj && null);                     //null

     console.log(null && obj);                     //null

     console.log(obj && undefined)            //undefined

     console.log(undefined && obj);           //undefined

     console.log(obj && NaN);                    //NaN

     console.log(NaN && obj);                   //NaN

     var obj2={} ;  var a=(obj && obj2);

     console.log(a);                                    //{} 返回第二个obj2{}

     console.log(a==obj2);                        //true

 ( 3 ) 对于逻辑与的短路问题:

对于逻辑与,如果第一个操作数是false,无论第二个操作数是什么,结果都不可能再是true。

   var found=true;      var result=(found && someUdefinedVariable);      console.log(result);     //显示someUdefinedVariable
   //例子中的found为true,所以会对someUdefinedVariable继续求值,但是该变量未定义,所以会提示错误

  var found=false;      var result=(found && someUdefinedVariable);     console.log(result);     //显示false
  //例子中的found为false,所以第一个操作数就已经能够决定结果,就不会在对第二个操作数求值

2.逻辑或(||) 

(1)对于布尔值,逻辑或是非常简单的,只要有一个true,就返回true;

(2)对于不是布尔值的情况则:

  • 如果第一个操作数是对象,则返第一个操作数
  • 如果第一个操作数的求值结果为false,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数是null,则返回null
  • 如果两个操作数是NaN,则返回NaN
  • 如果两个操作数是undefined,则返回undefined 

    var found=true;
    var result=(found || someUdefinedVariable);
    console.log(result);                //true

   //对于逻辑或,当一个为true的时候,就不会在对第二个操作数进行求值了

   console.log('' == false);     //true

   console.log('' || '- - ');         //‘- -’      相当于false || ‘- -’

 3.逻辑非(!)

  •   如果一个操作数是一个对象,返回true;
  •   如果一个操作数是一个空字符串,返回false;
  •   如果一个操作数是一个非空字符串,返回false;
  •   如果一个操作数是一个数值0,返回false;
  •   如果一个操作数是任意的非零字符,返回true;
  •   如果一个操作数是null,返回false;
  •   如果一个操作数是NaN,返回false;
  •   如果一个操作数是undefined,返回true;

var obj = {id:1,name:'tom'};     console.log(!obj);      //false

var obj = '';                              console.log(!obj);      //true 

var obj = 'tom';                        console.log(!obj);      //false

var obj = 0;                              console.log(!obj);      //true

var obj = 5;                              console.log(!obj);      //false

var obj = null;                          console.log(!obj);      //true

var obj = NaN;                         console.log(!obj);      //true

var obj = undefined;                console.log(!obj);      //true

注:逻辑与,逻辑非都是从左向右判断,谁的第一个逻辑判断为true就显示谁,只不过逻辑非必须两个都为true,而且谁是第一个false就显示谁。 

 

你可能感兴趣的:(js逻辑与或非)