Sep
04
Comparison
In Javascript there are 3 types we are often comparing: String
, Number
and Boolean
. After digging through the ECMA-262 specifications, here is the behaviour of the ==
operator (11.9.3) on these types:
Number == String
Typecasted as follow:Number == Number(String)
Number == Boolean
Typecasted as follow:Number == Number(Boolean)
String == Boolean
Typecasted as follow:Number(String) == Number(Boolean)
This means that when comparing data of two different types, they will first be converted to Number
.
Note: The order of the equality is not important: A == B
is the same as B == A
(except the order of evalution of A
and B
).
You can force comparison of a
and b
with the type you want:
- String:
"" + a == "" + b
- Number:
+a == +b
- Integer:
a | 0 == b | 0
- Boolean:
!!a == !!b
Addition / Concatenation
The binary +
operator follows a simple rule (11.6.1):
- if one of the operands is a
String
, both operands are converted toString
and the+
is a concatenation. - Else, both operands are converted to
Number
and the+
is an addition.
Note: Some Object
s are considered as String
s like Array
s. See 8.6.2 for more informations.
Note: The operator is binary so 1 + 1 + 'a'
will be executed as (1 + 1) + 'a'
and therefore be equal to "2a"
and not "11a"
.
If you liked this article, you might be interested in my Twitter feed as well.