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

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

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

相关推荐
道不尽世间的沧桑14 分钟前
第17篇:网络请求与Axios集成
开发语言·前端·javascript
diemeng11191 小时前
AI前端开发技能变革时代:效率与创新的新范式
前端·人工智能
bin91533 小时前
DeepSeek 助力 Vue 开发:打造丝滑的复制到剪贴板(Copy to Clipboard)
前端·javascript·vue.js·ecmascript·deepseek
晴空万里藏片云5 小时前
elment Table多级表头固定列后,合计行错位显示问题解决
前端·javascript·vue.js
曦月合一5 小时前
html中iframe标签 隐藏滚动条
前端·html·iframe
奶球不是球5 小时前
el-button按钮的loading状态设置
前端·javascript
kidding7235 小时前
前端VUE3的面试题
前端·typescript·compositionapi·fragment·teleport·suspense
无责任此方_修行中6 小时前
每周见闻分享:杂谈AI取代程序员
javascript·资讯
Σίσυφος19007 小时前
halcon 条形码、二维码识别、opencv识别
前端·数据库
学代码的小前端7 小时前
0基础学前端-----CSS DAY13
前端·css