
摘要:在本教程中,您将学习如何使用 JavaScript 逻辑运算符,包括逻辑非运算符 (!)、逻辑与运算符 (&&) 和逻辑或运算符 (||)。
逻辑运算符在 JavaScript 中很重要,因为它们允许您比较变量并根据比较结果执行操作。
例如,如果比较结果为 true,则可以运行代码块;如果结果为 false,则可以执行另一个代码块。
JavaScript 提供三种逻辑运算符
- ! (逻辑非)
- || (逻辑或)
- && (逻辑与)
1) 逻辑非运算符 (!)
JavaScript 使用感叹号 ! 来表示逻辑非运算符。! 运算符可以应用于任何类型的单个值,而不仅仅是布尔值。
当您将 ! 运算符应用于布尔值时,! 返回 true 如果值为 false,反之亦然。例如
let eligible = false,
required = true;
console.log(!eligible);
console.log(!required);Code language: JavaScript (javascript)输出
true
falseCode language: JavaScript (javascript)在本例中,eligible 为 true,因此 !eligible 返回 false。并且由于 required 为 true,因此 !required 返回 false。
当您将 ! 运算符应用于非布尔值时。! 运算符会将值转换为 布尔 值,然后对其进行取反。
以下示例展示了如何使用 ! 运算符
!a逻辑 ! 运算符根据以下规则工作
- 如果
a为undefined,则结果为true。 - 如果
a为null,则结果为true。 - 如果
a是一个非0的数字,则结果为false。 - 如果
a为NaN,则结果为true。 - 如果
a是一个 对象,则结果为false。 - 如果
a是一个空字符串,则结果为true。如果a是一个非空字符串,则结果为false
以下演示了逻辑 ! 运算符应用于非布尔值时的结果
console.log(!undefined); // true
console.log(!null); // true
console.log(!20); //false
console.log(!0); //true
console.log(!NaN); //true
console.log(!{}); // false
console.log(!''); //true
console.log(!'OK'); //false
console.log(!false); //true
console.log(!true); //falseCode language: JavaScript (javascript)双重否定 (!!)
有时,您可能会在代码中看到双重否定 (!!)。!! 使用两次逻辑非运算符 (!) 来将值转换为其真实的布尔值。
结果与使用 Boolean() 函数相同。例如
let counter = 10;
console.log(!!counter); // trueCode language: JavaScript (javascript)第一个 ! 运算符对 counter 变量的布尔值取反。如果 counter 为 true,则 ! 运算符将其设置为 false,反之亦然。
第二个 ! 运算符对第一个 ! 运算符的结果取反,并返回 counter 变量的真实布尔值。
2) 逻辑与运算符 (&&)
JavaScript 使用双安培符号 (&&) 来表示逻辑与运算符。以下表达式使用 && 运算符
let result = a && b;Code language: JavaScript (javascript)如果 a 可以转换为 true,则 && 运算符返回 b;否则,它返回 a。此规则适用于所有布尔值。
以下真值表说明了 && 运算符应用于两个布尔值时的结果
| a | b | a && b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
只有当两个值都为 true 时,&& 运算符的结果才为 true,否则为 false。例如
let eligible = false,
required = true;
console.log(eligible && required); // falseCode language: JavaScript (javascript)在本例中,eligible 为 false,因此表达式 eligible && required 的值为 false。
请参见以下示例
let eligible = true,
required = true;
console.log(eligible && required); // trueCode language: JavaScript (javascript)在本例中,eligible 和 required 都为 true,因此表达式 eligible && required 的值为 true。
短路求值
&& 运算符是短路求值的。这意味着 && 运算符仅在第一个值不足以确定表达式的值时才计算第二个值。例如
let b = true;
let result = b && (1 / 0);
console.log(result);Code language: JavaScript (javascript)输出
InfinityCode language: JavaScript (javascript)在本例中,b 为 true,因此 && 运算符无法确定结果,而无需进一步计算第二个表达式 (1/0)。
结果为 Infinity,这是表达式 (1/0) 的结果。然而
let b = false;
let result = b && (1 / 0);
console.log(result);Code language: JavaScript (javascript)输出
falseCode language: JavaScript (javascript)在这种情况下,b 为 false,&& 运算符不需要计算第二个表达式,因为它可以根据第一个值的值确定最终结果为 false。
&& 运算符链
以下表达式使用多个 && 运算符
let result = value1 && value2 && value3;Code language: JavaScript (javascript)&& 运算符具有以下特点
- 从左到右计算值。
- 对于每个值,将其转换为布尔值。如果结果为
false,则停止并返回原始值。 - 如果所有值都是真值,则返回最后一个值。
换句话说,&& 运算符返回第一个假值或最后一个真值。
如果一个值可以转换为 true,则称为真值。如果一个值可以转换为 false,则称为假值。
3) 逻辑或运算符 (||)
JavaScript 使用双竖线 || 来表示逻辑或运算符。您可以将 || 运算符应用于任何类型的两个值
let result = a || b;Code language: JavaScript (javascript)如果 a 可以转换为 true,则返回 a;否则,返回 b。此规则也适用于布尔值。
以下真值表说明了 || 运算符基于操作数的值的结果
| a | b | a || b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
如果两个值都被计算为 false,则 || 运算符返回 false。如果任一值都为 true,则 || 运算符返回 true。例如
let eligible = true,
required = false;
console.log(eligible || required); // trueCode language: JavaScript (javascript)请参见另一个示例
let eligible = false,
required = false;
console.log(eligible || required); // falseCode language: JavaScript (javascript)在本例中,表达式 eligible || required 返回 false,因为两个值都为 false。
|| 运算符也是短路求值的
与 && 运算符类似,|| 运算符是短路求值的。这意味着如果第一个值计算为 true,则 && 运算符不会计算第二个值。
|| 运算符链
以下示例展示了如何在表达式中使用多个 || 运算符
let result = value1 || value2 || value3;Code language: JavaScript (javascript)|| 运算符执行以下操作
- 从左到右计算值。
- 对于每个值,将其转换为布尔值。如果转换结果为
true,则停止并返回该值。 - 如果所有值都被计算为
false,则返回最后一个值。
换句话说,|| 运算符链返回第一个真值或最后一个值(如果找不到真值)。
逻辑运算符优先级
当您在表达式中混合逻辑运算符时,JavaScript 引擎会根据指定的顺序计算运算符。此顺序称为运算符优先级。
换句话说,运算符优先级是在表达式中计算逻辑运算符的顺序。
逻辑运算符的优先级从最高到最低的顺序如下
- 逻辑非 (!)
- 逻辑与 (&&)
- 逻辑或 (||)
摘要
- 非运算符 (
!) 对布尔值取反。 (!!) 将值转换为其真实的布尔值。 - 与运算符 (
&&) 应用于两个布尔值,如果两个值都为true,则返回true。 - 或运算符 (
||) 应用于两个布尔值,如果其中一个操作数为true,则返回true。 &&和||运算符都是短路求值的。它们也可以应用于非布尔值。- 逻辑运算符的优先级从最高到最低的顺序为
!、&&和||。 - 与运算符返回第一个假值或最后一个真值。
- || 运算符返回第一个假值。