JS中的 || 和 &&


一、逻辑运算符

逻辑运算符与(&&)和或(||)对于大家而言,并不陌生,但也正因如此,会有人认为它们在JavaScript中的表现也和在其他语言中一样。
这里面有些不太为人知的细微差别。在JavaScript中它所返回的不是一个布尔值,它所返回的是两个操作数中的一个,即选择两个操作数中的一个,然后返回它的值,而这个值并不一定是布尔类型。
例如:

let a =42,b=null,c="abc"

a || b // 42
a && b // null
b || c // "abc"
b && c // null
// 换一个角度理解的话,大致相当于
a || b
a ? a:b
a && b
a ? b:a

二、布尔值的隐式强制类型转换

在||和&&中,既然返回的不是true或者false,那么a && (b || c)这样的表达式在if和for中仍可正常使用的问题在于,这些表达式最后还会执行布尔值的隐式强制类型转换。
例如:

let d =42,e=null,f="abc"
if(d && (e || f)){
    console.log("yep")
}
这里的结果相当于
e || f
e ? e : f
d && f
d ? f : d
"abc"
再由if将“abc”强制转换为布尔值,所以最后结果为true
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值