浅谈逻辑运算符“&&“和“||“

本文主要探讨JavaScript中的逻辑运算符"&&"和"||"。逻辑与("&&")遵循同真则真,一假则假的规则,而逻辑或("||")是一真则真,全假则假。在运算过程中,逻辑与会返回决定整体真假的那个值,而逻辑或则返回第一个真值或最后一个值。理解这些特性有助于避免编程中的一些常见陷阱。

        作为一名刚入门的小白,前几天遇到了一些运算符的问题,其中比较突出的就是逻辑与和逻辑或的问题,对于这两个运算符可谓是让我数次踩坑,于是乎我就想在这里简单总结一下,既是对我对自己知识的一个总结回顾,也是希望和我一样的小白在遇到这个问题的时候可以更好的避免。


逻辑与和逻辑或

        首先我们要知道逻辑与("&&")和逻辑或("||")都是双目运算符,所谓双目运算符就是具有两个操作数的运算符,然后这连个运算符的结合方向为从左到右。当然,考虑运算符时我们除了考虑结合性还要考虑优先级别,在MDN中,我们规定&&运算符的优先级别大于||的优先级别。下来,我们来更深入的探讨&&和||

逻辑与

首先我们先来看一段代码

let a=2,b=4;
if(a && b)
{
	console.log("true");
}else{
	console.log("false")
}

看到这段代码,我们不难想象出结果会输出true,逻辑与整体的真假,是根据前后操作数的真假来判断,同真则真,一假则假。两个操作数都是真的时候,则整体为真(后面会细说),所以我们这里输出结果为true
在这里插入图片描述
那么,输出true说明if判断条件框中的值为true,那么在这里的a&&b,这个整体的值是true吗?
我们不妨做如下实验。

<script>
    let a=2,b=4;
    let c=(a&&b);
    console.log("c="+c);
</script>

如果说,按照我们之前的理解,这里的c值应该为true,可是,真的是这样吗?我们运行代码,输出结果如下
在这里插入图片描述
我们发现,输出的c并不是我们所想象的true,而是4,为什么会这样呢?我们先不说明原因,先进行逻辑或的测试。

逻辑或
let a=2;
let b;
if(a || b)
{
	console.log("true");
}else{
	console.log("false")
}

首先我们对逻辑或做一个简单的说明,逻辑或与逻辑与不同,逻辑或为,一真则真,全假则假,也就是说我们的操作数a和和b只要有一个为真,则a||b就是真,我们的a值为2,转成布尔类型为真,b由于未定义,所以是undefined,转成布尔类型为假,所以一真一假,a||b为真,所以会输出true
在这里插入图片描述
如我们所想,输出为true,可是a||b的值是多少呢?我们不妨继续实验

<script>
    let a=2,b;
    let c=(a||b);
    console.log("c="+c);
</script>

在这里插入图片描述
我们发现,c的值为2,也就是说a||b的值为2,这是为什么捏?
我们来做类比将我们测试逻辑与的数据用来测试逻辑或,看会怎么样

<script>
    let a=2,b=4;
    let c=(a||b);
    console.log("c="+c);
</script>

在这里插入图片描述
我们发现,a为2,b为4的时候,a&&b的值为4,a||b的值为2。这是怎么一回事呢?

揭秘

实际上,逻辑与和逻辑或这两个运算符运算后,返回的值并不是true或者false,他返回值的值,是决定他整体真假的那个值

<script>
    let a=2,b=4;
    let c=(a&&b);
    console.log("c="+c);
</script>

在这段代码中,a和b都是数字,也就是说都是真值,但是由于逻辑与的特性,我们单看a,并不能决定a||b是真还是假,如果b为真,则a||b为真,如果b为假,则a||b为假。所以说,实际上是b的值确定了a||b这个整体的值,所以按照我们上面所说,这个整体的值,是b的值,所以为4。
同样的道理,a||b中,a的值为真,所以不管b值是否为真,a||b的值都为真,所以说,是a决定的a||b的值,所以他的值为a值。
想证实很简单,我们不妨来试一试,让a为假,b为真,这样的情况下a||b,a为假,看b,如果b为真,整体为真,所以是b决定了整体的值,整体的值为b,同样的b如果为假,也是b决定了整体的值,整体的值也是b的值

<script>
    let a,b=4;
    let c=(a||b);
    console.log("c="+c);
</script>

在这里插入图片描述

    let a,b;
    let c=(a||b);
    console.log("c="+c);

在这里插入图片描述
结果证实,我们的答案是正确的。这时我们回到最初那里,在if判断框中,实际上是我们的返回值转成了布尔类型后为true,而不是直接为true,希望新学习的小伙伴们看到这里能清除的认识到逻辑与和逻辑或。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值