Boolean values are converted to numbers before comparisons are made with the equal operator (
==
) and not equal operator (!=
).
Comparisons where one operand is a string and the other is a number converts the string to a number first.
If one of the operands is an object and not the other then the object is evaluated with the valueOf()
function first.
null
and undefined
are equal and can’t be converted to other values.
NaN
is considered false
.
Here are a couple of other interesting facts about equality in JavaScript:
var x = (NaN == NaN); //false because NaN is not equal to NaN by rule var x = (true == 2); //false because true is converted to 1 first
if both operands are objects, the equal operator returns true if they both point to the same object.
Identically equal (===
) and identically not equal (!--
) don’t convert values before the comparison. Values that are not the same type will not be equal.
var x = ("2" == 2); //true "2" is converted to 2 var x = ("2" === 2); //false "2" is not converted and a string is not equal to a number var x = (null == undefined); //true var x = (null === undefined); //false
JavaScript allows for compound assignment operators (+=
, *=
, /=
, %=
and -=
);
var x = 10; x += 10; // 20, same as x = x + 10;
The comma allows more than one assignment in a single statement.
var x=1, y=2, z=3;