逻辑表达式的结果一定是true或false吗?

1,079 阅读2分钟

1. 短路运算(逻辑中断)

js在使用逻辑运算符时,会遇到一种“短路”的现场,那一旦能够明确无误地确定整个表达式的值,就不再计算表达式剩余的部分了,称为短路运算/逻辑中断

  • && : 一假则假
  • || : 一真则真
  • ! : 取反(没有短路运算,因为只有一个式子)

应用场景:函数默认参数、多条件筛选

介绍一种场景,函数默认参数,自己在开发中使用不多(很多js框架函数默认参数底层原理)

1.1. 代码分析

真正的逻辑表达式的值是由两个式子的值来决定的,并不一定是true或false。平时逻辑运算的结果都是布尔型是因为放在if或while或for条件中自动转换成了布尔型 只得到true或false

  1. && : 找假。 左边式子值可以(强制Boolean转换)转成false,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
 let res = '' && null
 console.log(res2) //''
 let res1 = 10 && null
 console.log(res3) //null
  1. || : 找真。 左边式子值可以(强制Boolean转换)转成true,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
 let res4 = 10 || null
 console.log(res4) //10

七种布尔转换为false:‘ ’空字符串、0、-0、NaN、undefined、null、false

1.2. 实际场景

作用:函数设置默认参数,用的很少,但是也有用。防止用户乱传实参导致函数出现NaN,不够安全,这样写可以保护函数

结果:两个形参只传一个实参,第二个会默认undefined,不加逻辑短路,sum的值为NaN,Number(undefined)=NaN,加了之后不再出现undefined的情况

 function getSum(num1, num2) {
       num1 = num1 || 1
       num2 = num2 || 2
       let sum = num1 + num2
       console.log(sum)
     }
     getSum(5)