这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
前言
- 逻辑运算符主要用于判断,转化boolean/执行结果,下面来介绍下或、与、非三个逻辑运算符。
|| (或)
- 参与的任意一个参数是true,则返回结果是true
let result = 1 || 0
let result = true || false
上面就是最简单的常规操作,下面来看看在if判断里的应用
let gender = 'man'
if(age>18 || age <100 || gender){
alert('你是个大人了')
}
- 或有短路的功能,即如果第一个值是真则不检验下面的值;一个或运算
||的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
alert( null || 1 ); // 1(1 是第一个真值)
alert( null || 0 || 1 ); // 1(第一个真值)
alert( undefined || null || 0 ); // 0(都是假值,返回最后一个值)
&&(与)
- 当两个操作数都是真值时,与运算返回
true,否则返回false
let gender = 'man'
if(age>18 && gender){
alert('你是个男子汉了')
}
alert( 1 && 2 && 3 ); // 3,最后一个值
- 同或相反,它如果监测到第一个假值就返回false,不在检验下面的值了,如果没有假值就返回最后一个值。
与运算 && 在或运算 || 之前进行,与运算 && 的优先级比或运算 || 要高。
- 所以代码
a && b || c && d跟&&表达式加了括号完全一样:(a && b) || (c && d)。
!(非)
- 逻辑非运算符接受一个参数,并按如下运作:
- 将操作数转化为布尔类型:
true/false。 - 返回相反的值。
例如:
alert( !true ); // false
alert( !0 ); // true
两个非运算 !! 有时候用来将某个值转化为布尔类型:
alert( !!"non-empty string" ); // true
alert( !!null ); // false
- 也就是,第一个非运算将该值转化为布尔类型并取反,第二个非运算再次取反。最后我们就得到了一个任意值到布尔值的转化。
有一个略显冗长的方式也可以实现同样的效果 —— 一个内建的 Boolean 函数:
alert( Boolean("non-empty string") ); // true
alert( Boolean(null) ); // false
- 非运算符
!的优先级在所有逻辑运算符里面最高,所以它总是在&&和||之前执行。