JavaScript 逻辑运算符入门

Javascript Logical Operator

摘要:在本教程中,您将学习如何使用 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)

在本例中,eligibletrue,因此 !eligible 返回 false。并且由于 requiredtrue,因此 !required 返回 false

当您将 ! 运算符应用于非布尔值时。! 运算符会将值转换为 布尔 值,然后对其进行取反。

以下示例展示了如何使用 ! 运算符

!a

逻辑 ! 运算符根据以下规则工作

  • 如果 aundefined,则结果为 true
  • 如果 anull,则结果为 true
  • 如果 a 是一个非 0 的数字,则结果为 false
  • 如果 aNaN,则结果为 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 变量的布尔值取反。如果 countertrue,则 ! 运算符将其设置为 false,反之亦然。

第二个 ! 运算符对第一个 ! 运算符的结果取反,并返回 counter 变量的真实布尔值。

2) 逻辑与运算符 (&&)

JavaScript 使用双安培符号 (&&) 来表示逻辑与运算符。以下表达式使用 && 运算符

let result = a && b;Code language: JavaScript (javascript)

如果 a 可以转换为 true,则 && 运算符返回 b;否则,它返回 a。此规则适用于所有布尔值。

以下真值表说明了 && 运算符应用于两个布尔值时的结果

aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

只有当两个值都为 true 时,&& 运算符的结果才为 true,否则为 false。例如

let eligible = false,
    required = true;

console.log(eligible && required); // falseCode language: JavaScript (javascript)

在本例中,eligiblefalse,因此表达式 eligible && required 的值为 false

请参见以下示例

let eligible = true,
    required = true;

console.log(eligible && required); // trueCode language: JavaScript (javascript)

在本例中,eligiblerequired 都为 true,因此表达式 eligible && required 的值为 true

短路求值

&& 运算符是短路求值的。这意味着 && 运算符仅在第一个值不足以确定表达式的值时才计算第二个值。例如

let b = true;
let result = b && (1 / 0);
console.log(result);Code language: JavaScript (javascript)

输出

InfinityCode language: JavaScript (javascript)

在本例中,btrue,因此 && 运算符无法确定结果,而无需进一步计算第二个表达式 (1/0)。

结果为 Infinity,这是表达式 (1/0) 的结果。然而

let b = false;
let result = b && (1 / 0);
console.log(result);Code language: JavaScript (javascript)

输出

falseCode language: JavaScript (javascript)

在这种情况下,bfalse&& 运算符不需要计算第二个表达式,因为它可以根据第一个值的值确定最终结果为 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。此规则也适用于布尔值。

以下真值表说明了 || 运算符基于操作数的值的结果

aba || b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

如果两个值都被计算为 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 引擎会根据指定的顺序计算运算符。此顺序称为运算符优先级

换句话说,运算符优先级是在表达式中计算逻辑运算符的顺序。

逻辑运算符的优先级从最高到最低的顺序如下

  1. 逻辑非 (!)
  2. 逻辑与 (&&)
  3. 逻辑或 (||)

摘要

  • 非运算符 (!) 对布尔值取反。 (!!) 将值转换为其真实的布尔值。
  • 与运算符 (&&) 应用于两个布尔值,如果两个值都为 true,则返回 true
  • 或运算符 (||) 应用于两个布尔值,如果其中一个操作数为 true,则返回 true
  • &&|| 运算符都是短路求值的。它们也可以应用于非布尔值。
  • 逻辑运算符的优先级从最高到最低的顺序为 !&&||
  • 与运算符返回第一个假值或最后一个真值。
  • || 运算符返回第一个假值。
本教程对您有帮助吗?