逻辑运算符到底返回什么你真的知道吗?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 对应的值。而且因为短路求值的行为,返回值的先后并不相同。

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

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

相关推荐
哪 吒几秒前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
安冬的码畜日常8 分钟前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n035 分钟前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
Q_w774240 分钟前
一个真实可用的登录界面!
javascript·mysql·php·html5·网站登录
昨天;明天。今天。1 小时前
案例-任务清单
前端·javascript·css
一丝晨光1 小时前
C++、Ruby和JavaScript
java·开发语言·javascript·c++·python·c·ruby
夜流冰1 小时前
工具方法 - 面试中回答问题的技巧
面试·职场和发展
Front思1 小时前
vue使用高德地图
javascript·vue.js·ecmascript
zqx_72 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己2 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5