zoukankan      html  css  js  c++  java
  • js || &&

    逻辑运算符通常用于布尔型(逻辑)值;这种情况,它们返回一个布尔型值。然而,&&和||运算符实际上返回一个指定操作数的值,因此这些运算符也用于非布尔型,它们返回一个非布尔型值。

    描述EDIT

    下面是逻辑运算符的说明:

    运算符示例说明
    逻辑与 (&&) expr1&&expr2 如果expr1 能转换成false则返回expr1,否则返回expr2. 因此, 在Boolean环境中使用时, 两个操作结果都为true时返回true,否则返回false.
    逻辑或 (||) expr1||expr2 如果expr1能转换成true则返回expr1,否则返回expr2. 因此,在boolean环境(在if的条件判断中)中使用时, 二者操作结果中只要有一个为true,返回true;二者操作结果都为false时返回false.
    逻辑非(!) !expr 如果单个表达式能转换为true的话返回false,否则返回true.

    能够转换为false的表达式有:null,0,""和undefined.

    尽管 && 和 || 运算符能够在非Boolean环境中使用, 但如果他们的返回值能够转换成Boolean值的话,也可以认为是Boolean运算.

    短路计算

    由于逻辑表达式的运算的顺序是从左到右,也可以用以下规则进行"短路"计算:

    • false && (anything)  短路计算的结果为false.
    • true || (anything)  短路计算的结果为 true.

    该规则确保这些计算的准确性. 注意如果上述表达式中的 anything 部分不能被计算的话,  两边都不会生效.还需要注意的是,上述表达式中的 anything 部分是任意的单个逻辑表达式(小括号中).

    下面示例代码中的两个函数是相等的.

    function shortCircuitEvaluation() {
      doSomething() || doSomethingElse()
    }
    
    function equivalentEvaluation() {
      var flag = doSomething();
      if (!flag) {
        doSomethingElse();
      }
    }

    但,由于运算符优先级的存在,下面的表达式的结果却不相同.右侧被小括号括起来的操作变成了独立的表达式.

    false && true  || true      // 结果为 true
    false && (true || true)     // 结果为 false

    逻辑与 (&&)

    下面的代码是 && (逻辑与) 运算符的示例.

    a1=true && true       // t && t 结果为 true
    a2=true && false      // t && f 结果为 false
    a3=false && true      // f && t 结果为 false
    a4=false && (3 == 4)  // f && f 结果为 false
    a5="Cat" && "Dog"     // t && t 结果为 Dog
    a6=false && "Cat"     // f && t 结果为 false
    a7="Cat" && false     // t && f 结果为 false

    逻辑或 (||)

    下面的代码是 || (逻辑或) 运算符的示例.

    o1=true || true       // t || t 结果为 true
    o2=false || true      // f || t 结果为 true
    o3=true || false      // t || f 结果为 true
    o4=false || (3 == 4)  // f || f 结果为 false
    o5="Cat" || "Dog"     // t || t 结果为 Cat
    o6=false || "Cat"     // f || t 结果为 Cat
    o7="Cat" || false     // t || f 结果为 Cat

    逻辑非 (!)

    下面的代码是 ! (逻辑非) 运算符的示例.

    n1=!true              // !t 结果为 false
    n2=!false             // !f 结果为 true
    n3=!"Cat"             // !t 结果为 false

    转换规则

    将 AND  转换为 OR

    下面涉及到Boolean运算的混合的操作:

    bCondition1 && bCondition2
     

    与下面的相等:

    !(!bCondition1 || !bCondition2)
     

    将 OR 转换为 AND

    下面涉及到Boolean运算的混合的操作:

    bCondition1 || bCondition2
     

    与下面的相等:

    !(!bCondition1 && !bCondition2)
     

    删除嵌套的小括号

    由于逻辑表达式是从左往右计算的,所以通常可以按照下面的规则删除小括号.

    删除嵌套的 AND

    下面涉及到Boolean运算的混合的操作:

    bCondition1 || (bCondition2 && bCondition3)
     

    与下面的相等:

    bCondition1 || bCondition2 && bCondition3
     

    删除嵌套的 OR

    下面涉及到Boolean运算的混合的操作:

    bCondition1 && (bCondition2 || bCondition3)
     

    与下面的相等:

    !(!bCondition1 || !bCondition2 && !bCondition3)

    规范EDIT

    规范状态说明
    ECMAScript 1st Edition. Standard Initial definition.
    ECMAScript 5.1 (ECMA-262)
    Logical NOT Operator

    ECMAScript 5.1 (ECMA-262)
    Binary Logical Operators
    Standard  
    ECMAScript 2015 (6th Edition, ECMA-262)
    Logical NOT operator

    ECMAScript 2015 (6th Edition, ECMA-262)
    Binary Logical Operators
    Standard  

    浏览器兼容性EDIT

    FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
    逻辑与 (&&) (Yes) (Yes) (Yes) (Yes) (Yes)
    逻辑或 (||) (Yes) (Yes) (Yes) (Yes) (Yes)
    逻辑非 (!) (Yes) (Yes) (Yes) (Yes) (Yes)

     

    向后兼容: 在 JavaScript 1.0 和 1.1 中的表现

    && 和|| 表达式的行为如下:

    运算符示例说明
    && expr1 &&expr2 如果第一个表达式(expr1) 能转换成false, 那么&& 运算会返回false,而不是expr1的值.
    || expr1 ||expr2 如果第一个表达式(expr1) 能转换成true, 那么|| 运算会返回true,而不是expr1的值.

    参考资料EDIT

    文档标签和贡献者

     此页面的贡献者: yenshenteoliMoltBoy
     最后编辑者: yenshen, Jan 5, 2015, 5:59:05 AM
  • 相关阅读:
    JAVA 一个接口多个实现类
    关于Web服务器
    美团买菜IOS版设备风控浅析与算法还原
    阿里App防Bot新版AliTigerTally方案浅析与算法还原1
    使用php的openssl_encrypt和python的pycrypt进行跨语言的对称加密和解密问题
    一个把人民币小写转换为大写中文的方法
    《重构》代码坏味道
    git 合并分支
    java中SPI机制 代码改变世界
    echo print print_r的区别
  • 原文地址:https://www.cnblogs.com/yelongsan/p/6369267.html
Copyright © 2011-2022 走看看