Comparison operators compare the values of two operands and evaluate whether the statement they form is true
or false
. The following example uses the strict equality operator (===
) to compare two operands: the expression 2 + 2
and the value 4
. Because the result of the expression and the number value 4
are the same, this expression evaluates to true
:
2 + 2 === 4 > true
Type coercion and equality
Two of the most frequently-used comparison operators are ==
for loose equality and ===
for strict equality. ==
performs a loose comparison between two values by coercing the operands to matching data types, if possible. For example, 2 == "2"
returns true
, even though the comparison is being made between a number value and a string value.
2 == 2 > true 2 == "2" > true
The same is true of !=
, which returns true
only if the operands being compared aren't loosely equal.
2 != 3 > true 2 != "2" > false
Strict comparisons using ===
or !==
don't perform type coercion. For a strict comparison to evaluate to true
, the values being compared must have the same data type. Because of this, 2 == "2"
returns true
, but 2 === "2"
returns false
:
2 === 3 > false 2 === "2" > false
To remove any ambiguity that might result from auto-coercion, use ===
whenever possible.
Operator | Description | Usage | Result |
---|---|---|---|
=== | Strictly equal | 2 === 2 | true |
!== | Not strictly-equal | 2 !== "2" | true |
== | Equal (or "loosely equal") | 2 == "2" | true |
!= | Not equal | 2 != "3" | true |
> | Greater than | 3 > 2 | true |
>= | Greater than or equal to | 2 >= 2 | true |
< | Less than | 2 < 3 | true |
<= | Less than or equal to | 2 <= 3 | true |
Truthy and falsy
All values in JavaScript are implicitly true
or false
, and can be coerced to the corresponding boolean value—for example, by using the "loosely equal" comparator. A limited set of values coerce to false
:
0
null
undefined
NaN
- An empty string (
""
)
All other values coerce to true
, including any string containing one or more characters and all nonzero numbers. These are commonly called "truthy" and "falsy" values.
"My string" == true > true 100 == true > true 0 == true > false
Logical operators
Use the logical AND (&&
), OR (||
), and NOT (!
) operators to control the flow of a script based on the evaluation of two or more conditional statements:
2 === 3 || 5 === 5; > true 2 === 2 && 2 === "2" > false 2 === 2 && !"My string." > false
A logical NOT (!
) expression negates the truthy or falsy value of an operand, evaluating to true
if the operand evaluates to false
, and false
if the operand evaluates to true
:
true > true !true > false !false > true
Using the logical NOT operator (!
) in front of another data type, like a number or a string, coerces that value to a boolean and reverses the truthy or falsy value of the result.
"string" > "string" !"string" > false 0 > 0 !0 > true
It's common practice to use two NOT operators to quickly coerce data to its matching boolean value:
!!"string" > true !!0 > false
The logical AND and OR operators don't perform any coercion by themselves. They return the value of one of the two operands being evaluated, with the chosen operand determined by that evaluation.
Logical AND (&&
) returns the first of its two operands only if that operand evaluates to false
, and the second operand otherwise. In comparisons that evaluate to boolean values, it returns true
only if the operands on both sides of the logical AND evaluate to true
. If either side evaluates to false
, it returns false
.
true && false > false false && true > false false && false > false true && true > true
When &&
is used with two non-boolean operands, the first operand is returned unchanged if it can be coerced to false
. If the first operand can be coerced to true
, the second operand is returned unchanged:
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"
Logical OR (||
) returns the first of its two operands only if that operand evaluates to true
, and the second operand otherwise. In comparisons that evaluate to boolean values, this means it returns true
if either operand evaluates to true
, and if neither side evaluates to true
, it returns false
:
true || false > true false || true > true true || true > true false || false > false
When using ||
with two non-boolean operands, it returns the first operand unchanged if it could be coerced to true
. If the first operand can be coerced to false
, the second operand is returned unchanged:
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 coalescing operator
Introduced in ES2020, the "nullish coalescing operator" (??
) returns the first operand only if that operand has any value other than null
or undefined
. Otherwise, it returns the second operand.
null ?? "My string" > "My string" undefined ?? "My string" > "My string" true ?? "My string"; > true
??
is similar to a logical OR, but stricter in how the first operand is evaluated. ||
returns the second operand for any expression that can be coerced to false
, including undefined
and null
. ??
returns the second operand only when the first operand is strictly equal to null
or undefined
, even if it could be coerced to false
:
0 ?? "My string"; > 0 false ?? "My string"; > false undefined ?? "My string"; > "My string"
Logical assignment operators
Use assignment operators to assign the value of a second operator to a first operator. The most common example of this is a single equals sign (=
), used to assign a value to a declared variable.
Use logical assignment operators to conditionally assign a value to a variable based on the truthy or falsy value of that variable.
The logical AND assignment (&&=
) operator evaluates the second operand and assigns to the first operand if the only if the first operand would evaluate to true
—effectively, "if the first operand is true, assign it the value of the second operand instead:"
let myVariable = false; myVariable &&= 2 + 2; > false myVariable = true; myVariable &&= 2 + 2; > 4
The truthy or falsy value of the first operand determines whether an assignment is performed. However, trying to evaluate the first operand using a comparison operator results in a true
or false
boolean, which can't be assigned a value:
let myVariable = 5; myVariable > 2 &&= "My string" > SyntaxError: Invalid left-hand side in assignment
The logical OR assignment (||=
) operator evaluates the second operand and assign to the first operand if the first operand evaluates to false
— effectively "if the first operand is false, assign it the value of the second operand instead:"
let myVariable = false; myVariable ||= 2 + 2; > 4 myVariable = true; myVariable ||= 2 + 2; > true
Check your understanding
Which operator indicates "strictly equal"?
===
==
=
!=