逻辑运算符

Nahida大约 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, 请参考MDNopen in new window

空值合并运算符和或运算符类似,它们之间重要的区别是:

  1. || 返回第一个 值。
  2. ?? 返回第一个 已定义的 值。

即: || 无法区分 false0、空字符串 "" 和 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的非运算符将操作数转为布尔类型,再返回相反的值。

上次编辑于:
贡献者: Nahida