1. 短路运算(逻辑中断)
js在使用逻辑运算符时,会遇到一种“短路”的现场,那一旦能够明确无误地确定整个表达式的值,就不再计算表达式剩余的部分了,称为短路运算/逻辑中断
- && : 一假则假
- || : 一真则真
- ! : 取反(没有短路运算,因为只有一个式子)
应用场景:函数默认参数、多条件筛选
介绍一种场景,函数默认参数,自己在开发中使用不多(很多js框架函数默认参数底层原理)
1.1. 代码分析
真正的逻辑表达式的值是由两个式子的值来决定的,并不一定是true或false。平时逻辑运算的结果都是布尔型是因为放在if或while或for条件中自动转换成了布尔型 只得到true或false
- && : 找假。 左边式子值可以(强制Boolean转换)转成false,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
let res = '' && null
console.log(res2) //''
let res1 = 10 && null
console.log(res3) //null
- || : 找真。 左边式子值可以(强制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)