博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js || &&
阅读量:5147 次
发布时间:2019-06-13

本文共 2891 字,大约阅读时间需要 9 分钟。

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

描述

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

运算符 示例 说明
逻辑与 (&&) 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 结果为 truea2=true && false      // t && f 结果为 falsea3=false && true      // f && t 结果为 falsea4=false && (3 == 4)  // f && f 结果为 falsea5="Cat" && "Dog"     // t && t 结果为 Doga6=false && "Cat"     // f && t 结果为 falsea7="Cat" && false     // t && f 结果为 false

逻辑或 (||)

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

o1=true || true       // t || t 结果为 trueo2=false || true      // f || t 结果为 trueo3=true || false      // t || f 结果为 trueo4=false || (3 == 4)  // f || f 结果为 falseo5="Cat" || "Dog"     // t || t 结果为 Cato6=false || "Cat"     // f || t 结果为 Cato7="Cat" || false     // t || f 结果为 Cat

逻辑非 (!)

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

n1=!true              // !t 结果为 falsen2=!false             // !f 结果为 truen3=!"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)

规范

规范 状态 说明
ECMAScript 1st Edition. Standard Initial definition.
Standard  
Standard  

浏览器兼容性

 

  • Desktop  
  • Mobile
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
(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的值.

参考资料

文档标签和贡献者

 此页面的贡献者: , , 
 最后编辑者: , Jan 5, 2015, 5:59:05 AM

转载于:https://www.cnblogs.com/yelongsan/p/6369267.html

你可能感兴趣的文章
Maven pom项目部署
查看>>
Cognos报表验证(添加字段)
查看>>
学术-物理-维空间:一维空间
查看>>
python-文件读写操作
查看>>
P1129 [ZJOI2007]矩阵游戏 二分图匹配
查看>>
Git 内部原理之 Git 对象哈希
查看>>
Vue中引入TradingView制作K线图
查看>>
爱历史 - 朝代歌
查看>>
【笔记】Cocos2dx学习笔记
查看>>
PHP设计模式之:单例模式
查看>>
Linux查看CPU和内存使用情况总结
查看>>
session丢失问题
查看>>
Python 批量修改root密码
查看>>
WEB服务器:Apache、Tomcat、JBoss、WebLogic、Websphere、IIS的区别与关系
查看>>
虚拟机CentOS设置IP
查看>>
Django之ORM多对多表创建方式,AJAX异步提交,分页器组件等
查看>>
SqlServer查询表名的备注(查询表名描述 MS_Description)
查看>>
去哪网实习总结:递归构建“流程运行顺序”的XML文件(JavaWeb)
查看>>
机器学习笔记十三:Ensemble思想(上)
查看>>
Unity3D中组件事件函数的运行顺序
查看>>