
摘要:在本教程中,您将学习如何使用 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
false
Code 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); //false
Code language: JavaScript (javascript)
双重否定 (!!)
有时,您可能会在代码中看到双重否定 (!!
)。!!
使用两次逻辑非运算符 (!
) 来将值转换为其真实的布尔值。
结果与使用 Boolean() 函数相同。例如
let counter = 10;
console.log(!!counter); // true
Code 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); // false
Code language: JavaScript (javascript)
在本例中,eligible
为 false
,因此表达式 eligible && required
的值为 false
。
请参见以下示例
let eligible = true,
required = true;
console.log(eligible && required); // true
Code language: JavaScript (javascript)
在本例中,eligible
和 required
都为 true
,因此表达式 eligible && required
的值为 true
。
短路求值
&&
运算符是短路求值的。这意味着 &&
运算符仅在第一个值不足以确定表达式的值时才计算第二个值。例如
let b = true;
let result = b && (1 / 0);
console.log(result);
Code language: JavaScript (javascript)
输出
Infinity
Code 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)
输出
false
Code 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); // true
Code language: JavaScript (javascript)
请参见另一个示例
let eligible = false,
required = false;
console.log(eligible || required); // false
Code language: JavaScript (javascript)
在本例中,表达式 eligible || required
返回 false
,因为两个值都为 false
。
|| 运算符也是短路求值的
与 &&
运算符类似,||
运算符是短路求值的。这意味着如果第一个值计算为 true
,则 &&
运算符不会计算第二个值。
|| 运算符链
以下示例展示了如何在表达式中使用多个 || 运算符
let result = value1 || value2 || value3;
Code language: JavaScript (javascript)
||
运算符执行以下操作
- 从左到右计算值。
- 对于每个值,将其转换为布尔值。如果转换结果为
true
,则停止并返回该值。 - 如果所有值都被计算为
false
,则返回最后一个值。
换句话说,||
运算符链返回第一个真值或最后一个值(如果找不到真值)。
逻辑运算符优先级
当您在表达式中混合逻辑运算符时,JavaScript 引擎会根据指定的顺序计算运算符。此顺序称为运算符优先级。
换句话说,运算符优先级是在表达式中计算逻辑运算符的顺序。
逻辑运算符的优先级从最高到最低的顺序如下
- 逻辑非 (!)
- 逻辑与 (&&)
- 逻辑或 (||)
摘要
- 非运算符 (
!
) 对布尔值取反。 (!!
) 将值转换为其真实的布尔值。 - 与运算符 (
&&
) 应用于两个布尔值,如果两个值都为true
,则返回true
。 - 或运算符 (
||
) 应用于两个布尔值,如果其中一个操作数为true
,则返回true
。 &&
和||
运算符都是短路求值的。它们也可以应用于非布尔值。- 逻辑运算符的优先级从最高到最低的顺序为
!
、&&
和||
。 - 与运算符返回第一个假值或最后一个真值。
- || 运算符返回第一个假值。