zoukankan      html  css  js  c++  java
  • javascript-深入理解&&和||

    先从两个问题看起:

    第一个问题 为什么 a && b 返回的是true,b && a 返回的是6

    1 var user = 6;
    2 var both = true;
    3 
    4 console.log( user && both);    //true
    5 console.log( both && user);    //6

    第二个问题 both进行自减  最后打印的依旧是3

    1 var user = false;
    2 var both = 3;
    3 
    4 console.log( user && both--);    // false
    5 console.log(both);   // 3
     

    先从三个层次来理解(以&&为例说明):

    第一层理解:操作数都是布尔值的时候,只有二者都为true的时候,结果才为true,否则为false。

    第二层理解:&&可以对真值和假值进行运算,如果两个都是真值,则返回一个真值,否则返回一个假值。但是,真值并不仅限于true,假值也并不仅限于false,下面这些值会被转换成false(其他所有值都为true)

    undefined

    null

    0/-0

    NaN

    " "

    在js中,进行&&操作,结果并不总是true和false,而是当前的值。当前的值有可能就是数值、字符串等。

    如果第一个表达式为真,那么就以第二个表达式的值作为其结果,这个结果不是转换之后的值,而是它本身。

    如果第一个表达式为假,那么就以第一个表达式的值作为其结果,这个结果不是转换之后的值,而是它本身。

      //上面第一个问题

    1
    var user = 6; 2 var both = true; 3 var math = 0; 4 console.log( user && both); //true 5 console.log( both && user); //6 6 console.log( both && math); //0 7 console.log( math && both); //0

    第三层理解:短路运算,运算过程,首先计算左操作数的值,如果计算结果为假值,则整个表达式结果就为假值,也就是左操作数的值 同时停止右操作数的求值。如果左操作数的结果为真值,则整个结果依赖于右操作数的值。

    关于短路运算的说明:

    在&&和||运算时,如果第一个表达式的值就已经能够确定整个运算的结果,那么第二个表达式将不会执行

    对于&&操作而言 第一个表达式的值为假值 那就决定了整个运算结果为假值 所以第一个表达式不会执行 所以y-- 并没有执行 y的值仍是3

      //上面第二个问题

    1
    var x = false; 2 var y = 3; 3 console.log(x && y--); // false 4 console.log(y); // 3


    对于||而言,

    如果第一个表达式的值为真值,结果就是第一个表达式的值,不是转换之后的,而是它本身。

    如果第一个表达式的值为假值,结果就是第二个表达式的值,不是转换之后的,而是它本身。

     
    1 var user = true;
    2 var both = 10;
    3 
    4 console.log(user || ++both);  //true
    5 console.log(both);   //10

    && 与 || 具有完全相同的原理,只是运算规则不太一样。

    1 var a = 10;
    2 var b = true;
    3 var c = 0;
    4 
    5 console.log(a || b);    //10
    6 console.log(b || a);    //true
    7 
    8 console.log(b || c);    //true
    9 console.log(c || b);    //true
  • 相关阅读:
    tpot从elastic search拉攻击数据之三 用于拉取的java程序
    tpot从elastic search拉攻击数据之二 配置端口映射
    wireshark使用
    VS c++ opencv画图
    java maven项目打包
    从es中拉取全部数据/大量数据 使用scroll+scan避免深分页
    java配置文件properties,yml,一般文件
    解决:JQuery "Uncaught ReferenceError: $ is not defined"错误
    java 字符串解析为json 使用org.json包的JSONObject+JSONArray
    easyui最简单的左右布局实现,及tab的右键菜单实现
  • 原文地址:https://www.cnblogs.com/treasurecat/p/7125670.html
Copyright © 2011-2022 走看看