逻辑与&&是并且的意思,相当于and;

逻辑或||是或者的意思,相当于or;

逻辑非!是取非的意思;相当于判断题中的错误答案;

 

返回值区别

一、逻辑非!:返回的永远是true或者false;并且可以通过使用两次逻辑非运算得到一个值的等价布尔值;!!x;

二、逻辑与&&:返回有两种情况;

 

  • 1、关系表达式的运算结果总是true或者flase,所以这样使用的时候,&&运算符本身也返回true或者false;

  • x==0&&y==0;//只有在x和y都是0的时候,才返回true;如果其中一个操作符是false,它返回false;
    //关系运算符的优先级比&&和||要高;所以类似这种表达式可以放心的书写,不用加圆括号;

  • `
  • 2、&&运算符首先计算左操作数的值;也就是首先计算&&左侧的表达式;如果计算结果是假值。那么整个表达式的结果一定也是假的值;因为“&&”这时候简单地返回左操作数的值,而不会对有操作数进行计算。
  • 反过来讲,如果左操作符是真值;那么整个表达式的结果则依赖于右操作数的值;如果右操作数是真值,那么整个表达式的值一定是真值;如果右操作数是假值,那么整个表达式的值一定是假值;因此,当左操作数的真值时,“&&”运算符将计算右操作数的值并将返回作为整个表达式的计算结果;
  • 三、逻辑或||:也是两个返回值,和逻辑与差不多;
  • 2、也可以返回一个真值或假值;它首先计算||左边的表达式,如果是一个真值;则返回||左边的这个真值;如果是假值;则计算||右边的的表达式;并返回这个表达式的结果;

 

**************************************************

详细解读:

逻辑与、逻辑或、逻辑非是真操作符进行布尔算数运算;经常和关系运算符(关系运算符是测试两个值之间的关系,比如大于、小于、相等、或者“是……的属性”==。===,>,>=,<,<=)一起配合使用;逻辑运算符是将多个关系表达式,组合起来成一个更复杂的表达式;

———————–

逻辑与&&

“&&”运算符可以从三个不同的层次理解:

第一层理解、最简单的一层理解是:当操作都是布尔值的时候,&&对两个值执行布尔与操作,只有第一个操作数和第二个操作数都是true的时候,它才会返回true;如果其中一个操作数的false,它返回false;

&&操作的不一定是布尔值,值是可以当做“真值”和“假值来操作的;”

null、NaN、undefined、“”、0、-0、false;这七个是flase;

其他的值包括所有对象都是真值;

 

第二层理解:&&可以对真值和假值进行布尔与的操作,如果操作数都是真值;那么返回一个真值;否则至少一个操作数是假值的话;则返回一个假值;在JavaScript中任何希望使用布尔值的地方;表达式和语句都会将其当做真值或假值来对待;因为实际上&&并不总是返回true和false;

第三层理解:&&运算符首先计算左操作数的值;也就是首先计算&&左侧的表达式;如果甲酸结果是价值。那么整个表达式的结果一定也是假的值;因为“&&”这时候简单地返回左操作数的值,而不会对有操作数进行计算。

  • 反过来讲,如果左操作符是真值;那么整个表达式的结果则依赖于右操作数的值;如果右操作数是真值,那么整个表达式的值一定是真值;如果右操作数是假值,那么整个表达式的值一定是假值;因此,当左操作数的真值时,“&&”运算符将计算右操作数的值并将返回作为整个表达式的计算结果;
  • var o={x:1};
    var p=null;
    var m=2;
    console.log(o&&o.x);//1;o和o.x都是真值;所以返回的是o.x;也就是1;
    console.log(p&& p.x);//null;p是假;所以返回的是null;直接返回左边的了;不去计算&&右边的;
    console.log(m&& m.x);//undefined;m是真,所以返回的是&&右边的无论&&是啥都会返回;所以返回的是undefined;

     

    -“&&”可以当做判断语句使用;类似if;

    &&的行为有时候成为短路;我们经常看到

    if(a==b) stop();//只有在a==b的时候才调用stop;
    (a==b)&& stop();//和上面一样
    (i="undefined")&&(alert("也是判断啊,"));//弹窗"也是判断啊"

     

    一般来讲,当&&在右侧的表达式具有副作用的时候(赋值,递增、递减和函数调用表达式)要格外小心;因为这些带有副作用的表达式的执行依赖于左操作数的计算结果

    逻辑或||

    “||”运算符对两个操作数做布尔或运算,如果其中一个或者两个操作数是真值;它返回一个真值;如果两个操作数都是假值;它返回一个假值;

    除了这个基本的布尔或运算外,和&&一样;它也具有一些更复杂的行为,它会首先计算第一个操作数的值;也就是说会首先计算左侧的表达式,如果计算结果为真值;则直接返回左侧的;否则再计算第二个操作数的值;也就是计算右侧的表达式,并返回这个表达式的计算结果;

    var max=max_width||preferences.max_width||500;
    //如果max_width已经定义了,直接使用它;否则在preferences中查找max_width;
    //如果没有定义它,则使用一个写死的常量;
    //这个方法用来从一组备选表达式中选出第一个真值的表达式;

    function copy(o.p){
    p=p||{};//如果参数p没有值传入,则使用一个新创建的对象;
    //函数体内的主逻辑 ;
    }
    //这个方法通常用在函数体内,用来给参数提供默认值;

     

    逻辑非!

    “!”运算符是一元运算符,它防止在一个单独的操作数之前,它的功能是将操作数的布尔值进行求反;

    例如;

    假设x是真的值;!x就是false。!!x就是true;

    假设x是假的值;!x就是true。!!x就是false;

    “!”是首先将其操作数转换为布尔值;然后再对布尔值求反;也就是说”!”总是返回true或者false;并且可以通过使用两次逻辑非运算来得到一个值的等价布尔值:!!X这样子的形式;

    “!”是一元运算符,”!”具有很高的优先级,并且和操作数紧密绑定在一起;如果对一个表达式进行求非,一定要在表达式外面加一个圆括号();

     

    —-

    //对于p和q取任意值,这两个灯饰都永远成立。
    !(p&&q)==!p||!q;
    !(p||q)==!p&&!q;

    ·····

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    “““““`