• web前端-javascript-逻辑运算符(! 非取反,短路的&& 与,短路的|| 或,&& || 非布尔值的情况,对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回)


    逻辑运算符

    var result = true && true;
    
    //只要有一个false,就返回false
    result = true && false;
    result = false && true;
    result = false && false;
    
    console.log("result = " + result);
    
    //第一个值为true,会检查第二个值
    true && alert("你看我出不出来!!");
    
    //第一个值为false,不会检查第二个值
    //false && alert("你看我出不出来!!");
    
    //两个都是false,则返回false
    result = false || false;
    
    //只要有一个true就返回true
    result = true || false;
    result = false || false;
    result = true || true;
    
    console.log("result = " + result);
    
    //第一个值为false,则会检查第二个值
    false || alert("123");
    
    //第一个值为true,则不再检查第二个值
    //true || alert("123");
    
    var a = false;
    
    //对a进行非运算
    a = !!a;
    console.log("a = " + a);
    
    var b = 10;
    b = !!b;
    
    console.log("b = " + b);
    console.log(typeof b);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    请添加图片描述

    请添加图片描述

    请添加图片描述

    1. ! 非

    var a = false;
    
    //对a进行非运算
    a = !!a;
    console.log("a = " + a);
    console.log(typeof a);
    
    var b = 10;
    b = !!b;
    
    console.log("b = " + b);
    console.log(typeof b);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.1. !可以用来对一个值进行非运算

    1.2. 所谓非运算就是指对一个布尔值进行取反操作,

    true 变 false,false 变 true

    1.3. 如果对一个值进行两次取反,它不会变化

    1.4. 如果对非布尔值进行运算,则会将其转换为我布尔值,然后再进行取反

    1. 所以我们可以利用该特点,来讲一个其他的数据类型转换为布尔值
    2. 可以为任意数据类型取两次反,来将其转换为布尔值
    3. 原理和 Boolean()函数一样

    2. && 与

    var result = true && true;
    
    //只要有一个false,就返回false
    result = true && false;
    console.log("result = " + result);
    
    result = false && true;
    console.log("result = " + result);
    
    result = false && false;
    
    console.log("result = " + result);
    
    //第一个值为true,会检查第二个值
    true && alert("你看我出不出来!!");
    
    //第一个值为false,不会检查第二个值
    false && alert("你看我出不出来!!");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.1. &&可以对符号两侧的值进行与运算并返回结果

    2.2. 运算规则

    1. 两个值中只要有一个值为 false 就返回 false
      • 只有两个值都为 true,才会返回 true
      • JS 中的"与"属于短路的与
    2. 如果第一个值为 false,则不会看第二个值

    3. || 或

    //两个都是false,则返回false
    var = result = false || false;
    
    //只要有一个true就返回true
    result = true || false;
    console.log("result = " + result);
    
    result = false || false;
    console.log("result = " + result);
    
    result = true || true;
    
    console.log("result = " + result);
    
    //第一个值为false,则会检查第二个值
    false || alert("123");
    
    //第一个值为true,则不再检查第二个值
    true || alert("123");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3.1. ||可以对符号两侧的值进行或运算并返回结果

    3.2. 运算规则

    1. 两个值中只要有一个 true,就返回 true
      • 爱如果两个值都为 false,才返回 false
    2. JS 中的或属于短路的或
      • 如果第一个值为 true 则不会检查第二个值

    4. && || 非布尔值的情况

    //true && true
    //与运算,如果两个值都为true,则返回后边的
    var result = 5 && 6;
    //与运算,如果两个值中有false,则返回靠前的false
    
    //false && true
    //result = 0 && 2;
    //如果有false则返回false
    //result = 2 && 0;
    //false && false
    //result = NaN && 0;
    //result = 0 && NaN;
    console.log(result);
    
    //true || true
    //如果第一个值为true,则直接返回第一个值
    result = 2 || 1;
    //result = 2 || NaN;
    //result = 2 || 0;
    
    //如果第一个值为false,则直接返回第二个值
    //result = NaN || 1;
    //result = NaN || 0;
    
    //result = "" || "hello";
    //result = -1 || "你好";
    
    console.log("result = " + result);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    请添加图片描述

    4.1. 对于非布尔值进行与或运算时,会先将其转换为布尔值,然后再运算,并且返回原值

    4.2. 与运算

    //true && true
    //与运算,如果两个值都为true,则返回后边的
    var result = 5 && 6;
    //与运算,如果两个值中有false,则返回靠前的false
    
    //false && true
    result = 0 && 2;
    console.log(result);
    
    //如果有false则返回false
    result = 2 && 0;
    console.log(result);
    
    //false && false
    result = NaN && 0;
    console.log(result);
    
    result = 0 && NaN;
    console.log(result);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1. 如果第一个值为 true,则必然返回第二个值
    2. 如果第一个值为 false,则直接返回第一个值

    4.3. 或运算

    1. 如果第一个值为 true,这返回第一个值
    2. 如果第一个值为 false,则返回第二个值
    //true || true
    //如果第一个值为true,则直接返回第一个值
    result = 2 || 1;
    console.log("result = " + result);
    
    result = 2 || NaN;
    console.log("result = " + result);
    
    result = 2 || 0;
    console.log("result = " + result);
    
    //如果第一个值为false,则直接返回第二个值
    result = NaN || 1;
    console.log("result = " + result);
    
    result = NaN || 0;
    console.log("result = " + result);
    
    result = "" || "hello";
    console.log("result = " + result);
    
    result = -1 || "你好";
    console.log("result = " + result);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    基于Linux的智能家居(工厂模式)
    如何围绕用户数字化运营?
    Nginx知识汇总
    Grafana设置默认主页
    【LeetCode75】第七十三题 用最少数量的箭引爆气球
    FPGA project : flash_secter_erase
    Java8中的Stream的汇总和分组操作~它并不难的
    “Node.js 包已不值得信任”
    算法题:SOJ1092: 欧几里得算法
    除了「加机器」,其实你的微服务还能这样优化
  • 原文地址:https://blog.csdn.net/weixin_64933233/article/details/128027596