比较运算符用于比较两个运算数的值,并评估
它们形成的语句是 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 |
Truthy and falsy
JavaScript 中的所有值均隐式地为 true
或 false
,并可强制转换为
相应的布尔值,例如使用“松散相等”参数
比较运算。一组有限的值强制转换为 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 合并运算符”(??
) 仅当第一个操作数
操作数具有除 null
或 undefined
以外的任何值。否则,它会返回
第二个操作数。
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
??
与逻辑 OR 类似,但第一个运算数的
。对于任何可被用作过滤条件的表达式,||
会返回第二个操作数。
强制转换为 false
,包括 undefined
和 null
。??
返回第二个
操作数,即第一个操作数不是 null
或 undefined
以外的任何内容,即使
可强制转换为 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 值决定了赋值
。不过,如果尝试使用比较运算符对第一个操作数求值,
运算符会产生 true
或 false
布尔值,
值:
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
检查您的理解情况
哪个运算符表示“严格等于”?
==
===
!=
=