逻辑运算符

125 阅读1分钟

这是我参与「掘金日新计划 · 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)

!(非)

  • 逻辑非运算符接受一个参数,并按如下运作:
  1. 将操作数转化为布尔类型:true/false
  2. 返回相反的值。

例如:

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
  • 非运算符 ! 的优先级在所有逻辑运算符里面最高,所以它总是在 && 和 || 之前执行。