比较运算符

比较运算符用于比较两个运算数的值,并评估 它们形成的语句是 truefalse。以下示例使用 严格相等运算符 (===),用于比较两个运算数:表达式 2 + 2 和值 4。由于表达式的结果和数字 4 的值相同,则此表达式的计算结果为 true

2 + 2 === 4
> true

类型强制转换和等式

两个最常用的比较运算符是 ==,用于实现松散相等 和 === 表示严格相等。== 对两个指标进行粗略比较 将运算数强制转换为匹配的数据类型(如果可能)。对于 例如,2 == "2" 会返回 true,虽然在进行比较时也是如此 。

2 == 2
> true

2 == "2"
> true

!= 也是如此,它仅在操作数为 true 时返回 并不大致相等。

2 != 3
> true

2 != "2"
> false

使用 ===!== 的严格比较不会执行类型强制转换。对于 进行严格比较,求值结果为 true,则所比较的值必须具有 相同的数据类型。因此,2 == "2" 会返回 true,但 2 === "2" 返回 false

2 === 3
> false

2 === "2"
> false

如需移除自动强制转换可能造成的任何歧义,请在每次===

运算符 说明 用法 结果
=== 严格均等 2 === 2 true
!== 不严格等于 2 !== "2" true
== 等于(或“大致相等”) 2 ==“2” true
!= 不等于 2 != "3" true
> 大于 3 >2 次 true
>= 大于或等于 2 >= 2 true
< 小于 2 <3 次 true
<= 小于或等于 2 <= 3 true

Truthy and falsy

JavaScript 中的所有值均隐式地为 truefalse,并可强制转换为 相应的布尔值,例如使用“松散相等”参数 比较运算。一组有限的值强制转换为 false

  • 0
  • null
  • undefined
  • NaN
  • 一个空字符串 ("")

所有其他值强制转换为 true,包括包含一个或多个 字符和所有非零数字。这些通常称为“truthy”和 “falsy”值。

"My string" == true
> true

100 == true
> true

0 == true
> false

逻辑运算符

您可以使用逻辑 AND (&&)、OR (||) 和 NOT (!) 运算符,根据两个或多个条件语句的评估结果来控制脚本的流动:


2 === 3 || 5 === 5;
> true

2 === 2 && 2 === "2"
> false

2 === 2 && !"My string."
> false

逻辑 NOT (!) 表达式会对操作数的 true 或 falsy 值求反,如果操作数的计算结果为 false,则计算结果为 true;如果操作数计算结果为 true,则计算结果为 false


true
> true

!true
> false

!false
> true

在另一种数据类型(例如! 数字或字符串,将该值强制转换为布尔值,并将真值或 结果的 falsy 值。

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

通常的做法是使用两个 NOT 运算符将数据快速强制转换为 匹配的布尔值:

!!"string"
> true

!!0
> false

逻辑 AND 和 OR 运算符本身不执行任何强制转换。他们 根据所选择的两个运算数中的其中一个返回 操作数。

逻辑 AND (&&) 仅在其两个操作数的第一个操作数之间返回 计算结果为 false,否则计算为第二个操作数。相比之下, 求值结果为布尔值,仅当两边的操作数都返回时,才会返回 true 逻辑 AND 的求值结果为 true。如果任一侧的计算结果为 false,则 返回 false

true && false
> false

false && true
> false

false && false
> false

true && true
> true

&& 与两个非布尔运算数一起使用时,会返回第一个运算数 如果可以强制转换为 false,则保持不变。如果第一个操作数可以强制转换 更改为 true,则原样返回第二个操作数:

false && "My string"
> false

null && "My string"
> null

"My string" && false
> false

"My string" && "My second string"
> "My second string"

2 === 2 && "My string"
> "My string"

逻辑 OR (||) 仅在其两个操作数的第一个操作数之间返回 计算结果为 true,否则计算为第二个操作数。相比之下, 求值为布尔值,这意味着,如果其中任一操作数返回 true, 求得的值为 true,如果任一侧的求值结果均不为 true,则返回 false

true || false
> true

false || true
> true

true || true
> true

false || false
> false

|| 与两个非布尔运算数搭配使用时,会返回第一个运算数 如果可以强制转换为 true,则保持不变。如果第一个操作数可以强制转换 更改为 false,则原样返回第二个操作数:

false || "My string"
> "My string"

null || "My string"
> "My string"

"My string" || false
> "My string"

"My string" || "My second string"
> "My string"

2 === 2 || "My string"
> true

Nullish 合并运算符

在 ES2020 中引入, “nullish 合并运算符”(??) 仅当第一个操作数 操作数具有除 nullundefined 以外的任何值。否则,它会返回 第二个操作数。

null ?? "My string"
> "My string"

undefined ?? "My string"
> "My string"

true ?? "My string";
> true

?? 与逻辑 OR 类似,但第一个运算数的 。对于任何可被用作过滤条件的表达式,|| 会返回第二个操作数。 强制转换为 false,包括 undefinednull?? 返回第二个 操作数,即第一个操作数不是 nullundefined 以外的任何内容,即使 可强制转换为 false

0 ?? "My string";
> 0

false ?? "My string";
> false

undefined ?? "My string";
> "My string"

逻辑赋值运算符

使用赋值运算符将第二个运算符的值分配给第一个运算符 运算符。最常见的示例是单个等号 (=),用于 为声明的变量分配值

使用逻辑赋值运算符有条件地为变量赋值 进行预测。

逻辑 AND 赋值 (&&=) 运算符对第二个操作数求值,并且 当第一个操作数的计算结果为 时,为第一个操作数赋值。 true,即“如果第一个操作数为 true,则为其赋值 第二个操作数:

let myVariable = false;
myVariable &&= 2 + 2;
> false

myVariable = true;
myVariable &&= 2 + 2;
> 4

第一个运算数的 truey 或 falsy 值决定了赋值 。不过,如果尝试使用比较运算符对第一个操作数求值, 运算符会产生 truefalse 布尔值, 值:

let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment

逻辑 OR 赋值 (||=) 运算符对第二个操作数求值,并 如果第一个操作数的计算结果为 false,则分配给第一个操作数: 实际上,“如果第一个操作数为 false,则为其分配第二个操作数的值 操作数:

let myVariable = false;
myVariable ||= 2 + 2;
> 4

myVariable = true;
myVariable ||= 2 + 2;
> true

检查您的理解情况

哪个运算符表示“严格等于”?

===
==
=
!=