逻辑运算符通常用于Boolean
型值。不过 &&
和||
运算符实际上返回一个指定操作数的值,因此也可用于非布尔型,返回一个非布尔型值。\
描述
运算符 | 示例 | 说明 |
---|---|---|
逻辑与( && ) | expr1 && expr2 | 如果 expr1 能转化为 false则返回 expr1, 否则返回 expr2。与布尔值一起使用时,两个操作数都返回 true,则返回 true,否则返回 false |
逻辑或( || ) | expr1 || expr2 | 如果 expr1 能转化为 true则返回 expr1, 否则返回 expr2。与布尔值一起使用时,有一个操作数返回 true,则返回 true,两个操作数都返回false则返回 false |
逻辑非( ! ) | !expr | 如果 expr能转为 true 则返回 false。如果expr能转为 false 则返回 true |
null
NaN
0
- 空字符串
''
undefined
短路计算
由于逻辑表达式的运算顺序是从左到右,也可以用一下规则进行"短路"计算:
false && (anything)
短路计算的结果为 假。true || (anything)
短路计算的结果为 真。
下面示例中代码中的两个函数是相等的。
function aa () {
doSoming() || doElseSoming();
doSoming() && doElseSoming();
}
function bb () {
let orFlag = doSoming();
if (!orFlag) {
doElseSoming();
}
let andFlag = doSoming();
if (andFlag) {
doElseSoming();
}
}
由于运算符优先级的存在,下面的表达式的结果就不一样了。小括号括起来的部分变为了独立的表达式。
false && true || true // 结果为 true
false && (true || true) // 结果为 false
逻辑与( && )
下面的代码是 &&
运算符的示例
a1 = true && true // true
a2 = true && false // false
a3 = false && true // false
a4 = false && (3==4) // false
a5 = "cat" && "Dog" // Dog
a6 = false && "cat" // false
a7 = "cat" && false // false
逻辑或( || )
下面的代码是||
运算符的示例
a1 = true || true // true
a2 = true || false // true
a3 = false || true // true
a4 = false || (3==4) // false
a5 = "cat" || "dog" // cat
a6 = false || "cat" // cat
a7 = "cat" || false // cat
逻辑非( ! )
下面的代码是!
运算符的示例
n1 = !true // false
n2 = !false // true
n3 = !"cat" // false
转换规则
将 &&
转换为 ||
aa && bb
// 等于
!(!aa || !bb);
将 ||
转换为 &&
aa || bb
// 等于
!(!aa && !bb)
删除嵌套的小括号
删除嵌套的 &&
aa || (bb && cc)
// 等于
aa || bb && cc
删除嵌套的 ||
aa && (bb || cc)
// 等于
!(!aa || !bb && !cc);
详情参考 MDN