JavaScript中的逻辑运算符多用于条件判断
一、&&:所有条件都为true时,返回true;如果其中只要有一个为false,则返回false
例如:
let a = 1, b = 3, c = 5;
console.log(a < b && b < c) // 返回结果为true
但是当有一个操作数不是布尔值的情况下,逻辑与不一定会返回一个布尔值,这时会遵循如下规则:
- 如果前面操作数隐式类型转换后为true,则返回后面的操作数
例如:
console.log(1 && 2) // 返回结果是 2
console.log(true && 1 && 'hello') // 返回 hello
- 如果前面操作数隐式类型转换后不是true,则返回第一个隐式转换为false的值(即短路的值),不执行后面的操作
console.log("" && true) // 返回空格
console.log(1 && 0 && 'hello') // 返回 0
console.log(1 && false && 0) // 返回 false
console.log(0 && null && 1) // 返回 0
console.log(NaN && 1 && 2) // 返回 NaN
console.log(null && true) // 返回 null
console.log(undefined && true) // 返回 undefined
注意:返回值不一定是boolean类型的值,null则返回null;undefined则返回undefined;NaN则返回NaN
二、|| :只要有一个条件为true,则返回true;所有条件都为false,则返回false
和&&类似,返回值不一定是boolean值
- 如果前面操作数隐式类型转换后为true,则返回true,后面就被短路;都为false,则会一直往下进行判断,打印最后一个
console.log(33<22||33>11);//返回true
console.log(undefined || null || 0);//返回0
console.log(undefined || 88 || 99 );//返回88
console.lof(undefined || 33>10 || false);//返true
console.log(null || undefined || NaN);//返回NaN
console.log(NaN || undefined) ;//返回undefined
console.log("hello" || NaN);//返回hello
短路运算简单总结
&&:表达式1 && 表达式2
当 表达式1 为false时,返回 表达式1,且不会执行 表达式2
当 表达式1 为true时,返回 表达式2
||:表达式1 || 表达式2
当 表达式1 为true时,返回 表达式1 ,且不会执行 表达式2
当 表达式1 为false时,返回 表达式2