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

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

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

相关推荐
小满zs19 分钟前
关于HBuilderX+ 微信小程序开发工具启动的问题
前端·uni-app
林深见鹿_海蓝见鲸25 分钟前
微信小程序反编译完整教程(Windows 新手版)
前端
夏雪coding32 分钟前
JeecgBoot 动态路由踩坑(Vue2):刷新白屏、permissionList[0] 报 undefined,以及我最后为什么全删了
javascript·vue.js
吴声子夜歌36 分钟前
Java面试——设计模式(一)
java·设计模式·面试
默_笙42 分钟前
😋 我让爬虫终于看到了我的网站,后端同事说"这也行?"(上):SEO 与渲染模式
前端·javascript
feixing_fx1 小时前
告别枯燥字体:Web 字体加载策略与 font-display 最佳实践
前端·css·前端框架·交互·css3
Liora_Yvonne1 小时前
不懂后端,只会 TypeScript,想独立做完整项目?这套全栈底座就是给前端准备的
前端·后端·全栈
前端Hardy1 小时前
GitHub 爆火!236K+ Star!一套 Skills 让 AI 按工程师方式写代码
前端·后端
烬羽2 小时前
AI Coding 全流程实战:从需求到上线,我用 AI 开发了一个 NPM 包
前端·react.js·ai编程
前进的程序员2 小时前
Codex破局:前端组件秒级生成|提速React/Vue开发,可复用提示词+实战调试经验
前端·vue.js·react.js·codex