逻辑运算符
大约 2 分钟
JavaScript 中有四个逻辑运算符:||(或),&&(与),!(非),??(空值合并运算符)。
或 ||
两个竖线符号表示“或”运算符。
🔨示例:
a = undefined, b = 1;
result = a || b; // => 1
Tip
JavaScript的或运算寻找第一个真值。
最简单的比较是布尔值——true为真,false为假,或运算返回第一个true,若没有则返回false。
a = true || true; // => true
b = false || true; // => true
c = false || false; // => false
其他类型的值转换为布尔值进行比较,如数字0为false。
a = 0 || 1; // => 1
b = "0" || 1; // => "0"
常见用法
if中判断任一条件成立
if(conditionA || conditionB) {
// expression
}
短路求值
|| 对其参数进行处理,直到达到第一个真值,然后立即返回该值,而无需处理其他参数。
如在Express中,或许需要允许通过环境变量来修改监听的端口,此时就可以使用短路求值:
const PORT = process.env.PORT || defaultPort;
空值合并运算符 ??
兼容性
这是一个新特性,可能需要Polyfill, 请参考MDN
空值合并运算符和或运算符类似,它们之间重要的区别是:
||返回第一个 真 值。??返回第一个 已定义的 值。
即: || 无法区分 false、0、空字符串 "" 和 null/undefined。 有时,这些值恰是我们想要的,而它们会被或运算忽略。
因此,对于一些情况,或运算和空值合并运算并没有区别。例如height表示Jack的身高:
const getHeight = (somebody: String): Int => {
// ...
}
let height: Int = getHeight('Jack') ?? 180;
// 等价于 let height = getHeight('Jack') || 180。 没有人的身高会是0!
与 &&
🔨示例:
a = 4, b = undefined, c = 7;
result = a && b && c; // => undefined
Tip
JavaScript的与运算寻找第一个假值。
与或运算原理相同,与运算判断布尔值或由其他类型转换后的布尔值,都是true则返回true,否则返回false。
注意
与运算 && 的优先级比或运算 || 高。
非 !
🔨示例:
a = true;
b = !a; // => false
Tip
JavaScript的非运算符将操作数转为布尔类型,再返回相反的值。