js的逻辑运算符(逻辑或逻辑与)

85 阅读1分钟

逻辑或的本质

result = a || b

  • 从左到右依次计算操作数。

  • 处理每一个操作数时,都将其转化为布尔值(Boolean);

  • 如果结果是 true,就停止计算,返回这个操作数的初始值。

  • 如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数。(返回的值都是初始的形式,不会转为boolean类型)

  • 换句话说,一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。

   // 本质推导一: 之前的多条件是如何进行判断的
    var chineseScore = 95
    var mathScore = 99
    // chineseScore > 90为true, 那么后续的条件都不会进行判断
    if (chineseScore > 90 || mathScore > 90) {}
    
    // 本质推导二: 获取第一个有值的结果
    var info = "abc"
    var obj = {name: "zhangsan"}
    var message = info || obj || "我是默认值"
    console.log(message.length)

逻辑与的本质

result = value1 && value2 && value3

  • 从左到右依次计算操作数。
  • 在处理每一个操作数时,都将其转化为布尔值(Boolean);
  • 如果结果是 false,就停止计算,并返回这个操作数的初始值(一般不需要获取到初始值);
  • 如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数。
  • 换句话说,与运算 返回第一个假值,如果没有假值就返回最后一个值。
  // 本质推导一: 逻辑与, 称之为短路与
    var chineseScore = 80
    var mathScore = 99
    if (chineseScore > 90 && mathScore > 90) {}
    // 本质推导二: 对一些对象中的方法进行有值判断
    var obj = {
      name: "zhangsan",
      friend: {
        name: "lisi",
        eating: function() {
          console.log("eat something")
        }
      }
    }

    // 调用eating函数
    // obj.friend.eating()
    obj && obj.friend && obj.friend.eating && obj.friend.eating()