怎么快速理解逻辑非-逻辑与-逻辑或

首先我们先了解一下这三个是怎么样一个概念:

逻辑非( !)

逻辑非操作符由感叹号( !)表示。可以应用于ECMAScript中的任何值。无论这个值是什么数据类型,它都会返回一个布尔值(布尔值只有两个ture、false)。

那么具体它是怎么返回呢------首先将它的操作数转换为一个布尔值,然后再对其求反。一定要记住它的执行顺序是先转换为一个布尔值,然后求反

然后我们就要想布尔值只有两个值一个是ture、一个是false,那么我们只要记住能转成false的有哪些就OK了---------能转为false的有 false / "" / null / undefined / 0 / NaN ------ 总共有6个,那是不是其余的都会转为ture。这个时候我们知道了什么能转为false,什么能转为ture,接下来就是去“取反”了-------当转化为true的时候,它的逻辑非结果就是false;当转化为false的时候,它的逻辑非结果就是ture。

接下来我们举个例子来看看

!0        //ture                 因为0经过布尔值转换后是false,再取反,结果就是ture
!123     //false                 因为123经过布尔值转换后是ture,再取反,结果就是false
逻辑与(&&)

逻辑与操作符有两个和号表示(&&)。(它要找的是第一个false
逻辑与操作属于“短路”操作,就是说,如果第一个操作数能够决定结果了,那它就不会再对它后面的操作数求值了。

逻辑与可用于任何类型的操作数,不仅仅是布尔值,在有一个操作数不是布尔值的情况,逻辑与操作就不一定返回值,
此时它遵循下列规则:

    1、如果第一个操作数隐式类型转换后为true,则返回第二个操作数
      (这里还有一个意思就是当你所有的值转换后都是ture的时候,返回的值就是最后一个值)
    2、如果第一个操作数隐式类型转换后为false,则返回第一个操作数
    3、如果有一个操作数是null,则返回null
    4、如果有一个操作数是NaN,则返回NaN
    5、如果有一个操作数是undefined,则返回undefined

现在我们就来实际操作一下

123&&NaN              //NaN       上述第4,有一个出现了NaN


999&&'ssss'&&0        //0         999-ture;‘ssss’-ture;0-false;
0是第一个false,所以结果就是0


""&&123&&false        //""         ""-false;123-true;false-false 
 虽然出现了两个false,但是逻辑操作属于短路操作,找到false以后就不会再往后找了,
""空字符串转换后是false,所以结果是""。
逻辑或( || )

逻辑或操作符由两个竖线符号表示( || )。 (它要找的是第一个ture)。
它也属于“短路”操作;
逻辑或可用于任何类型的操作数,不仅仅是布尔值,在有一个操作数不是布尔值的情况,逻辑与操作就不一定返回值,
此时它遵循下列规则:

1、如果第一个操作数隐式类型转换后为true,则返回第一个操作数
2、如果第一个操作数隐式类型转换后为false,则返回第二个操作数
  (这里还有一层意思,和逻辑与相似,就是当所有的值都为false,将返回最后一个值)
3、如果两个操作数是null,则返回null
4、如果两个操作数是NaN,则返回NaN
5、如果两个操作数是undefined,则返回undefined

实操一下

123||0  //123      123-ture;它要找第一个ture,所以结果就是123
0||""    //""       0-false;""-false  都是false,返回最后一个值,所以结果一就是""

现在我们已经知道它们各自的运算了,那么他们同时出现到底谁先谁后呢????

顺序为-----逻辑非>逻辑与>逻辑或
!>&&>||

举个例子

123&&0||"ssss"||!null    //"ssss"
我们来理一下思路
第一步算!(先转换为布尔值,再取反)
123&&0||"ssss"||ture
第二步算&&(取第一个false)
0||"ssss"||ture
第三步算||(取第一个ture)
"ssss"

到这里涉及逻辑非、逻辑与、逻辑或的一些基础知识点就已经差不多了,希望对你们有帮助!!!!!

你可能感兴趣的:(怎么快速理解逻辑非-逻辑与-逻辑或)