首页 > 编程语言 >JavaScript逻辑运算符AND和OR之间的区别

JavaScript逻辑运算符AND和OR之间的区别

时间:2023-07-02 09:02:43浏览次数:53  
标签:逻辑 const exp2 exp1 JavaScript 操作数 运算符 true

AND&&和 OR||是 JavaScript 中的逻辑运算符,可用于执行不同的逻辑表达式。在这篇文章中,我将解释它们之间的区别。

本文的目标是让您了解这些运算符的工作原理以及它们的不同之处。

要理解这些运算符,了解JavaScript 中真值和假值的概念非常重要。

(更|多优质内|容:java567 点 c0m)

 

真实值和虚假值

在 JavaScript 中,许多值可以用它们的布尔值来表示。由 表示的值false是假值,由 表示的值true是真值。让我们看一些例子:

 0
 false
 undefined
 null
 "" // empty string

值0、false、undefined、null和空字符串""是假值,因为它们的布尔表示是false。

至于真值,任何不是真值的值falsy都是truthy。这意味着真值包括true, 1, [3. 4], {}, "hello"。

现在我们已经解决了这个问题,让我们看看它们如何与ANDandOR运算符联系起来。

如果您对此感兴趣,我有该主题的视频版本。

AND操作员

逻辑AND运算符用在表达式中的两个操作数之间,如下所示:

 operand1 && operand2

如果第一个操作数是真值,则该运算符返回第二个操作数。如果第一个操作数是假值,则运算符将返回第一个操作数。正如我们所见,真值是计算结果为 的值true。

让我们看一个例子:

 const exp1 = 5
 const exp2 = "Dillion"
 ​
 const result = exp1 && exp2
 ​
 console.log(result)
 // "Dillion"

在此示例中,我们的exp1值为5和exp2值为"Dillion"。然后我们有一个result变量,它保存使用和&&之间的运算符返回的值。exp1``exp2

这里发生的是,运算符从左侧开始检查是否exp1为真值。5是真值,因此运算符返回右侧的值。这就是为什么“Dillion”result具有价值。

AND让我们看另一个多次使用运算符的示例:

 function returnFalsy() {
   return ""
 }
 ​
 const exp1 = [1, 2]
 const exp2 = returnFalsy()
 const exp3 = { name: "Dillion" }
 ​
 const result = exp1 && exp2 && exp3
 ​
 console.log(result)
 // ""

正如我们在这个例子中看到的,我们有:

  • exp1用一个数组

  • exp1与调用的返回值returnFalsy()(这是一个空字符串 - 一个虚假值)

  • exp3与一个物体

最后,我们有一个result变量,它保存使用and&&之间的运算符和and之间的运算符返回的值。exp1exp2exp2``exp3

我们这里有exp1 && exp2操作数 1 和操作数 2。然后这个表达式的结果将成为下一个表达式的操作数 1:result && exp3。exp3这是第二个表达式中的第二个操作数。

这里发生的是,运算符从左侧开始检查是否exp1为真值。exp2在本例中,我们有一个数组,它是一个真值,这意味着将返回第二个操作数。exp2成为第一个操作数,并exp3成为第二个表达式的第二个操作数。

第二个&&运算符检查是否exp2为真值。在这种情况下,空字符串“”是一个假值,因此运算符返回exp2。它不需要检查,exp3因为错误的事实exp2意味着操作员将停止从左到右的检查。

这里发生的是短路,您可以在我关于短路运算符的文章中了解更多信息

OR操作员

逻辑OR运算符用在表达式中的两个操作数之间,如下所示:

 operand1 || operand2

如果第一个操作数是真值,则运算符返回第一个操作数。如果第一个操作数是假值,则运算符将返回第二个操作数。

让我们看一个例子:

 const exp1 = 5
 const exp2 = "Dillion"
 ​
 const result = exp1 || exp2
 ​
 console.log(result)
 // 5

在此示例中,我们的exp1值为5和exp2值为"Dillion"。然后我们有一个result变量,它保存使用和||之间的运算符返回的值。exp1``exp2

这里发生的是,运算符从左侧开始检查是否exp1为真值。5是一个真值,因此运算符返回它。这就是为什么result值为5的原因。

操作OR员不会费心去检查,exp2因为它已经找到了一个真实值。这与运算符相反AND。AND继续从左向右,只要true。但OR会停止(再次,一旦看到true- 它只会继续从左到右,只要false

OR让我们看另一个多次使用运算符的示例:

 function returnFalsy() {
   return ""
 }
 ​
 const exp1 = null
 const exp2 = returnFalsy()
 const exp3 = { name: "Dillion" }
 ​
 const result = exp1 || exp2 || exp3
 ​
 console.log(result)
 // { name: "Dillion" }

正如我们在这个例子中看到的,我们有:

  • exp1值为null(假值)

  • exp1与调用的返回值returnFalsy()(这是一个空字符串 - 一个虚假值)

  • exp3与一个物体

最后,我们有一个result变量,它保存使用and||之间的运算符和and之间的运算符返回的值。exp1exp2exp2``exp3

我们这里有exp1 || exp2操作数 1 和操作数 2。然后这个表达式的结果将成为下一个表达式的操作数 1:result || exp3。exp3这是第二个表达式中的第二个操作数。

这里发生的是,运算符从左侧开始检查是否exp1为真值。在本例中,我们有,它是一个假值,这意味着将返回null第二个操作数。成为第一个操作数,并成为第二个表达式的第二个操作数。exp2exp2exp3

第二个||运算符检查是否exp2为真值。在这种情况下,空字符串“”是一个假值,因此运算符返回exp3。正如您在这里所注意到的,OR只要遇到错误值,运算符就会继续运行。它只会在找到真值或到达表达式末尾时停止。

使用ANDand ORinif语句

if语句允许您创建条件语句,您可以在其中确定根据条件执行的内容。

AND让我们看一个在语句中使用的示例if:

 const isLoggedIn = true
 const cart = []
 ​
 if (isLoggedIn && cart.length) {
   console.log("Cart not empty")
 } else {
   console.log("Cart is empty")
 }

你能猜出执行这段代码的结果吗?结果是:

 // Cart is empty

原因如下。if该语句的条件是isLoggedIn && cart.length。左操作数的isLoggedIn计算结果为true。请记住,&&如果左操作数为 ,则运算符返回右操作数true。如果左操作数为 ,则仅返回左操作数false。在这种情况下,该运算符将返回cart.length,其计算结果为 0,因为cart数组为空。

这意味着该if块被执行为if(0).

该if语句将强制0为布尔值。正如我们之前看到的,0是一个假值。因此if,看到条件表达式0为的语句false将执行else块:console.log("Cart is empty")。您可以在本文中了解有关类型强制的更多信息。

假设OR被使用:

 const isLoggedIn = true
 const cart = []
 ​
 if (isLoggedIn || cart.length) {
   console.log("Cart not empty")
 } else {
   console.log("Cart is empty")
 }

你能猜到这个结果吗?这里是:

 // Cart not empty

原因如下。if这里语句的条件是isLoggedIn || cart.length。左操作数的isLoggedIn计算结果为true。请记住,||如果左操作数为 ,则该运算符将返回该操作数true。如果左操作数为 ,则仅返回右操作数false。在这种情况下,运算符将返回isLoggedIn其计算结果为true。

这意味着该if块被执行为if(true).

在这种情况下,不会发生强制转换,因为它true已经是一个布尔值。因此if,看到条件表达式true为的语句true将执行if块:console.log("Cart not empty")。

包起来

AND以下是和之间的区别摘要OR:

  • AND如果左表达式是,则返回右表达式true

  • AND如果左表达式是,则返回左表达式false

  • OR如果左表达式是,则返回右表达式false

  • OR如果左表达式是,则返回左表达式true

您注意到 是 的OR倒数AND吗?只要AND左边在,就一直向右true,LEFT只要左边在,就一直向右false

如果您喜欢这篇文章,请与其他人分享。

(更|多优质内|容:java567 点 c0m)

标签:逻辑,const,exp2,exp1,JavaScript,操作数,运算符,true
From: https://www.cnblogs.com/web-666/p/17520368.html

相关文章

  • Python 逻辑表达式的妙用
    今天偶然看到有这样一段代码,感到很惊讶:super().__init__(package_nameor(robot_name+"_moveit_config"))语义非常明确且简洁,但是逻辑表达式可以这样用吗?我搜索了一下,原来or和and表达式的返回值并不一定是bool值。>>>1and22>>>1and00>>>0and10>>>No......
  • TS时常忘记的运算符
    1、可选链运算符?.可选链运算符,对null和undefined及时停止运算,解放es5的繁琐逻辑判断//tsconstval=a?.b//es5varval=a===null||a.b支持的语法如下:obj?.prop//尝试访问可能不存在的属性obj?.[exp]//同上,计算属性写法arr?.[index]//尝试访问可能不存在......
  • JS高级用法:像大神一样玩转JavaScript
    前言众所周知,JavaScript是一种非常流行的编程语言,它已经成为了网页开发的必备技能。但是,在我们从事JavaScript编程的时候,我们却没有完全发掘和利用它的全部潜力。在本文中,我们将分享一些高级的JavaScript技巧,希望帮助掘友们更好地理解和掌握JavaScript编程。关于JS高级用法在学习Ja......
  • 与用户交互- 格式化输出 - 基本运算符
    1、与用户交互'''python3'''与"python2"的区别:'''python3'''将获取到的用户输入赋值给变量名resres=input("请输入您的用户名")print(res,type(res))#id返回一串数字(可以看成是内存地址)type返回变量值的数据类型'''inpu......
  • 双写一致性之定时更新、异步发送短信、异步秒杀逻辑前后端、课程页页面前端、课程相关
    目录一、双写一致性之定时更新任务逻辑二、异步发送短信视图函数任务三、异步秒杀逻辑前后端1.1前端Sckill.vue视图类路由任务四、课程相关表分析先创建一个course.app表数据迁移表六、课程表数据录入七、课程主页接口一、双写一致性之定时更新任务逻辑@app.taskdefupdate......
  • 一文拆解“复杂软件”的无代码配置逻辑
    最近教研组的小伙伴们收到了一些用户在试用smardaten过程中的困惑。为了解答大家的疑问,今天特别邀请了教研组的美女小姐姐,以一个比较简单易理解的场景“疫情填报”,来拆解一下smardaten如何支撑应用的搭建逻辑,以及smardaten作为企业级无代码与轻量级无代码的配置逻辑差异。课程视频......
  • JavaScript aglo 算法 时间复杂度
    https://www.bigocheatsheet.com/https://www.hello-algo.com/chapter_preface/about_the_book/ gpt的回答好的,下面给出这些算法的JavaScript例子,并给出它们的时间复杂度分析:O(1)-常数时间复杂度:javascriptCopyCodefunctionconstantTimeAlgorithm(n){return2+......
  • laytpl( Layui 的一款轻量 JavaScript 模板引擎)html标签点击事件传递多参
     <scripttype="text/html"id="aobjectvalue_temp"><spanclass="us-font-blue"style="cursor:pointer"onclick="seeinfo('{{d.aobjectkey}}','{{d.atype}}')">[资源详情]</spa......
  • JavaScript实现Fly Bird小游戏
    1.分析页面结构,理清需求和功能游戏有三个界面,分别是开始界面,游戏界面和游戏结束界面。1.1开始界面 游戏的大背景上下移动的游戏标题和翅膀摆动的小鸟start按钮,点击进入游戏界面一直移动的地面1.2游戏界面显示越过障碍数量的计分器移动的障碍物,分别是上管道和下......
  • JavaScript中数组常用方法汇总!
    数组是一个复杂数据类型,我们在操作它的时候就不能再想基本数据类型一样操作了。比如我们想改变一个数组//创建一个数组vararr=[1,2,3]//我们想把数组变成只有1和2arr=[1,2]这样肯定是不合理,因为这样不是在改变之前的数组。相当于重新制作了一个数组给到arr......