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 to`String`

and the`+`

is a concatenation. - Else, both operands are converted to
`Number`

and 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".*

If you liked this article, you might be interested in my Twitter feed as well.