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 toStringand the+is a concatenation. - Else, both operands are converted to
Numberand the+is an addition.
Note: Some Objects are considered as Strings like Arrays. 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".