逻辑运算符到底返回什么你真的知道吗?true or false?

引言

大家都知道逻辑运算符,也知道它们可以判断两个式子的true or false,如果对它们的了解不多的话会认为它们的返回是就是true or false,那它们的返回值到底是什么呢?让我们一起来看看吧~

逻辑运算符

我们都知道在 JavaScript 中,逻辑运算符会返回布尔值 truefalse。JavaScript 中的逻辑运算符有三种:&&(与)||(或)!(非)。这些运算符主要用于判断多个条件的关系。

在 JavaScript 中,逻辑运算符的使用方法如下:

  • &&(与):当左右两个表达式都为true 时,返回 true;否则返回 false。

  • ||(或):当左右两个表达式至少有一个为true时,返回 true;否则返回 false。

  • !(非):对表达式取反,即如果表达式为 true,则返回 false,否则返回 true

  • 例如,我们可以使用以下代码来演示 JavaScript 中逻辑运算符的使用:

arduino 复制代码
const x = 3;  
const y = 5;  
const z = 7;  
   
// && 运算符  
console.log(x < y && y < z);  // 输出 true  
console.log(x < y && y > z);  // 输出 false  
   
// || 运算符  
console.log(x > y || y < z);  // 输出 true  
console.log(x > y || y > z);  // 输出 false  
   
// ! 运算符  
console.log(!(x < y));        // 输出 false  
console.log(!(x > y));        // 输出 true  

我们从上面的代码中可以看出,在 JavaScript 中,逻辑运算符返回的都是布尔值truefalse。通过逻辑运算符,我们可以将多个表达式进行组合判断,从而得到最终的结果。

这么看没问题吧,确实是都返回truefalse,但是看到进度条你会发现事情不太对劲,难道还有别的说法?让我们继续往下看吧~

逻辑运算符的特性

逻辑或

然而,JavaScript 中的逻辑或运算符 || 还有一个特殊的行为,会返回其操作数中的第一个被解释为true的值,如果所有操作数都是false或者 undefined,则返回最后一个操作数。这个特性有时候会在编程中带来意想不到的效果。例如存在true时,逻辑或运算符||将会返回第一个true

js 复制代码
let a = 10
console.log(a || 0); // 输出 10

没错逻辑或运算符的返回值是10,而不是true,这也就是所说的逻辑或运算符||会返回其操作数中第一个被解释为true的值,为什么是第一个其实也很简单。

在使用逻辑或运算符时,如果第一个操作数被解释为 true,那么第二个操作数将不会被计算;在使用逻辑与运算符时,如果第一个操作数被解释为 false,那么第二个操作数将不会被计算。这种行为被称为"短路求值",它可以提高程序的效率和性能。

这也就是逻辑或运算符只要遇到true后面的内容就不会在判断的特性的又来,所以说遇到第一个true之后,后续的根本不进行判断,那么返回的是第一个true合情合理吧。

同理如果全为false那么就会返回最后一个操作数:

ini 复制代码
const x = '';  
const y = null;  
const z = undefined;  
   
console.log(x || y || z || 'default');  // 输出 'default'  

在上面的代码中,xyz 都被解释为 false,因此逻辑或运算符将返回 'default'

另外大家应该都知道吧,如果不知道我就补充一下,如果逻辑运算符的操作数不是布尔值,JavaScript 引擎会将其自动转换为布尔值,然后再进行运算。具体来说,以下值会被转换为false

  • false
  • 0 和 -0
  • 空字符串 '' 和 ""(即长度为 0 的字符串)
  • null
  • undefined
  • NaN

除了以上值之外,其他所有值都会被转换为true

不过既然逻辑或的返回值是这样的,那么逻辑与呢?它也有这样的特性吗?

逻辑与

其实在 JavaScript 中,大家猜也能猜到,逻辑与运算符&&不会像逻辑或运算符那样返回其操作数中的第一个被解释为true的值。因为逻辑与运算符 && 只有在左右两个操作数都被解释为true时,才会返回true;否则,它会返回false

那我们可就要考虑它是怎么个返回法了,我们先试一试两个true值会返回什么:

js 复制代码
let a = 10
console.log(a && 1); // 输出 1

大家猜对了没,其实很好理解,同理嘛,只有找到最后一个true的时候才会判定为true,所以返回最后一个true合情合理,最后一个true的值是1按照逻辑或的特性类比一下,就是返回1没错,那就说明逻辑与也存在这个特性。

那我们就可以猜到它肯定是返回第一个false的值了,来试试:

ini 复制代码
const x = 'hello';  
const y = 0;  
   
console.log(x && 'default');  // 输出 'default'  
console.log(y && 1);          // 输出 0  

在上面的代码中,x 被解释为 true,因此表达式 x && 'default' 的结果为 'default'。而 y 被转换为 false,因此表达式 y && 1 的结果为 0。

没错了,这不就是在使用逻辑与运算符时的"短路求值"嘛,如果第一个操作数被解释为 false,那么第二个操作数将不会被计算。这是因为在逻辑与运算中,只有左右两个操作数都被解释为 true,整个表达式才会返回 true

不过逻辑非就没有这种说法了,大家有兴趣可以自己尝试一下~

总结

总之,逻辑运算符返回的并不全是布尔值 true 或 false,在 JavaScript 中,逻辑与运算符 && 和 逻辑或运算符||会返回其操作数中 true 或者 false 对应的值。而且因为短路求值的行为,返回值的先后并不相同。

那么这篇文章就到这里结束啦~

如果你想了解更多这类文章,点赞关注作者更新更多~

相关推荐
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255022 小时前
前端常用算法集合
前端·算法
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203982 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2343 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
测试老哥3 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
如若1233 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~4 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语4 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport4 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap