比较运算符

比较运算符用于比较两个运算数的值,并评估它们所构成的语句是 true 还是 false。以下示例使用严格等式运算符 (===) 比较两个运算数:表达式 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

真值和假值

JavaScript 中的所有值都是隐式 truefalse,并且可以强制转换为相应的布尔值,例如,使用“大致等于”比较运算符。一组有限的值会强制转换为 false

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

所有其他值都会强制转换为 true,包括包含一个或多个字符的任何字符串以及所有非零数字。这类值通常称为“真值”和“假值”。

"My string" == true > true  100 == true > true  0 == true > false 

逻辑运算符

您可以使用逻辑“与”(&&)、“或”(||) 和“非”(!) 运算符,根据对两个或更多条件语句的评估来控制脚本的流程:

 2 === 3 || 5 === 5; > true  2 === 2 && 2 === "2" > false  2 === 2 && !"My string." > false  

逻辑 NOT (!) 表达式会对运算数的真值或假值执行求反运算,如果运算数的求值结果为 false,则求值结果为 true;如果运算数的求值结果为 true,则求值结果为 false

 true > true  !true > false  !false > true  

在其他数据类型(例如数字或字符串)前面使用逻辑 NOT 运算符 (!) 会将该值强制转换为布尔值,并将结果的真或假值取反。

"string" > "string"  !"string" > false  0 > 0  !0 > true 

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

!!"string" > true  !!0 > false 

逻辑 AND 和 OR 运算符本身不会执行任何强制转换。它们会返回被评估的两个运算数之一的值,所选运算数由该评估决定。

逻辑 AND 运算符 (&&) 仅当第一个操作数的求值结果为 false 时才会返回第一个操作数,否则返回第二个操作数。在求值为布尔值的比较中,只有当逻辑 AND 运算符两侧的运算数求值为 true 时,它才会返回 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" 

逻辑或运算符 (||) 仅当第一个操作数的求值结果为 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 

第一个运算元的真值或假值决定是否执行赋值。不过,如果尝试使用比较运算符来求值第一个运算数,则会得到 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 

检查您的理解情况

哪个运算符表示“完全相等”?

===
==
=
!=