js逻辑运算符&&、||、! 详细总结

大家好,我是李俊辉!如果您觉得文章有用,请帮忙点个赞或关注,也为我鼓励一下,坚持写下去!

js中逻辑运算符在开发中可以算是比较常见的运算符了,主要有三种:逻辑与&&、逻辑或||和逻辑非!。
当&&和|| 连接语句时,两边的语句会转化为布尔类型(Boolean),然后再进行运算,具体的运算规则如下:

1.&&

1.1两边条件都为true时,结果才为true;
1.2如果有一个为false,结果就为false;
1.3当第一个条件为false时,就不再判断后面的条件

注意:当数值参与逻辑与运算时,结果为true,那么会返回的会是第二个为真的值;如果结果为false,返回的会是第一个为假的值。

2.||

2.1只要有一个条件为true时,结果就为true;
2.2当两个条件都为false时,结果才为false;
2.3当一个条件为true时,后面的条件不再判断
注意:当数值参与逻辑或运算时,结果为true,会返回第一个为真的值;如果结果为false,会返回第二个为假的值;

3.!

3.1当条件为false时,结果为true;反之亦然。

上代码说明:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
    <script>
        console.log( 5 && 4 );//当结果为真时,返回第二个为真的值4
        console.log( 0 && 4 );//当结果为假时,返回第一个为假的值0
        console.log( 5 || 4 );//当结果为真时,返回第一个为真的值5
        console.log( 0 || 0 );//当结果为假时,返回第二个为假的值0
        console.log((3||2)&&(5||0));//5
        console.log(!5);//false
    </script>
</head>
<body>
</body>
</html>

需要说明一下,逻辑与的优先级是高于逻辑或的;
比如:console.log(3||2&&5||0),会先算2&&5的值为5,然后再3||5----3,最后再3||0----3,所以最终结果为3.

逻辑运算符也可以用于表达式,这才是本文的重点:

表达式a && 表达式b: 计算表达式a(也可以是函数)的运算结果,
如果为 True, 执行表达式b(或函数),并返回b的结果;
如果为 False,返回a的结果;

表达式a || 表达式b: 计算表达式a(也可以是函数)的运算结果,
如果为 Fasle, 执行表达式b(或函数),并返回b的结果;
如果为 True,返回a的结果;

转换规则:

对象为true;
非零数字为true;

零为false;
非空字符串为true;
空字符串为法false;
其他为false;

例如:
var a = obj || " " ; //如果 obj 为空,a就赋值为 " " ;
var a = check() && do(); //如果check()返回为真,就执行do(),并将结果赋值给 a;

我们来做几个试验:

var b, c, d;
  b = true || 0; //b=true;
  c = false || 0; //c=0;
  d = 1 || 0; //d=1;
var b, c, d;
  b = 1-1 || 1+1; //b=2
  c = function () { return undefined } || function () { return 1};//c=function();
  d = c();//d=undefined
var b, c, d;
  b = 1-1 || 1+1; //b=2
  c = function () { return 1 } || function () { return undefined};//c=function();
  d = c();//d=1
b = {} || { a: 1, getA: function () { return this.a}}; //b=object
var b, c, d;
  b = { a: 1, getA: function () { return this.a } } || {}; //b=object
  c = b.getA();//c=1;

通过这几个实验,可以看出,JS的||并不是像C#里面的||一样 单纯的返回一个布尔类型。
大家都知道js的布尔类型判定是对象是true,非零是true,非空字符串是true其余的都是false

由此得出
逻辑或 ||: var a = 表达式1 || 表达式2

表达式1        表达式2                    a取值
1                        0                    表达式1结果值
1                        1                    表达式1结果值
0                        1                    表达式2结果值
0                        0                    表达式2结果值

逻辑与 &&: var a = 表达式1 && 表达式2

表达式1   表达式2        a取值
1               0      表达式2结果值
1       1      表达式2结果值
0       1      表达式1结果值
0       0      表达式1结果值

主要原因是因为短路,逻辑或 || 在前面有一个ture的时候则不看后面直接停止,逻辑与&&同理。

转载一定注明出处!
本文地址:https://www.jianshu.com/p/fb1896ca6d92
2020年2月12日 新冠状病毒期间憋在家

参考链接:https://www.jb51.net/article/140789.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。