逻辑运算符的用法


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


描述

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

运算符 示例 说明
逻辑与 (&&) expr1 &&expr2 如果expr1 能转换成false则返回expr1,否则返回expr2。因此,与布尔值一起使用时,如果两个操作数都为true&&返回true,否则返回false
逻辑或 (||) expr1 ||expr2 如果expr1能转换成true则返回expr1,否则返回expr2。因此,与布尔值一起使用时,如果任意一个操作数为true||返回true
逻辑非(!) !expr

如果expr能转换为true,返回false

如果expr能转换为false,则返回true

如果一个值可以被转换为true,那么这个值就是所谓的truthy,如果可以被转换为false,那么这个值就是所谓的falsy

能够转换为false的表达式有:

  • null
  • NaN
  • 0
  • 空字符串("");
  • undefined

尽管 && 和 || 运算符能够使用非布尔值的操作数, 但它们依然被看作是布尔操作符,因为它们的返回值总是能够被转换为布尔值。

短路计算

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

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

逻辑规则保证这些评估总是正确的。请注意,上述表达式中的 anything 部分未被评估,因此这样做的任何副作用都不会生效。还要注意,上述表达式的 anything 部分是任何单个逻辑表达式(如圆括号所示)。

例如,下面示例代码中的两个函数是相等的。

function shortCircuitEvaluation() {  
  // logical OR (||)
  doSomething() || doSomethingElse();
  
  // logical AND (&&)
  doSomething() && doSomethingElse();
}

function equivalentEvaluation() {

  // logical OR (||)
  var orFlag = doSomething();
  if (!orFlag) {
    doSomethingElse();
  }
  
  
  // logical AND (&&)
  var andFlag = doSomething();
  if (andFlag) {
    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

以下涉及布尔运算:

bCondition1 && bCondition2
 

总是等于:

!(!bCondition1 || !bCondition2)
 
将 OR 转换为 AND

以下涉及布尔运算:

bCondition1 || bCondition2
 

总是等于:

!(!bCondition1 && !bCondition2)
 

删除嵌套的小括号

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

删除嵌套的 AND

以下涉及布尔运算:

bCondition1 || (bCondition2 && bCondition3)
 

总是等于:

bCondition1 || bCondition2 && bCondition3
 
删除嵌套的 OR

以下涉及布尔运算:

bCondition1 && (bCondition2 || bCondition3)
 

总是等于:

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

规范

Specification Status Comment
ECMAScript 1st Edition (ECMA-262)StandardInitial definition.
ECMAScript 5.1 (ECMA-262)StandardDefined in several sections of the specification: Logical NOT OperatorBinary Logical Operators
ECMAScript 2015 (6th Edition, ECMA-262)StandardDefined in several sections of the specification: Logical NOT OperatorBinary Logical Operators
ECMAScript Latest Draft (ECMA-262)Living StandardDefined in several sections of the specification: Logical NOT OperatorBinary Logical Operators

浏览器兼容

Feature Chrome Edge Firefox Internet Explorer Opera Safari
Logical AND (&&) Yes Yes Yes Yes Yes Yes
Logical OR (||) Yes Yes Yes Yes Yes Yes
Logical NOT (!) Yes Yes Yes Yes Yes Yes

参考资料


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值