Conversão entre tipos
Em Javascript, podemos realizar conversões entre os tipos dos valores.
É possível realizar conversões entre os tipos String, Number e Boolean.
Conversões entre String e Number.
let a = String(5); // '5'
let b = Number('5'); // 5
let c = Number('3.145'); // 3.145
let d = String(0); // '0'
E se a gente tentar converter uma string que não é um número pra Number ou uma string vazia?
let notANumber = Number('batata'); // NaN
let emptyString = Number(''); // 0
Caso a string não seja um número, a String será convertida para NaN, que significa not a number. No caso de uma string vazia como '', a string será convertida para 0.
Também podemos converter Number e String para Boolean.
let a = Boolean('bola'); // true
let b = Boolean(321); // true
let c = Boolean(0); // false
let d = Boolean(''); // false
Geralmente, qualquer número diferente de 0 ou string não vazia, será considerada true. Strings vazias '' ou o número 0 serão convertidas para false.
Os casos acima são conversões explicitas, porém, existem alguns casos onde o próprio javascript realiza conversões para nos, de forma implicita.
O caso mais comum desse tipo de conversão implicita é com o operador ==.
Lembra do operador de comparação === e !==? Bem, esses operadores verificam tanto os valores quanto os tipos. Porém, existem também os operadores == e != que realizam conversões implicitamente pra nos.
Isso fica claro na prática:
42 == '42'; // true
42 === '42'; // false
5 != '5'; // false
5 !== '5'; // true - tipos diferentes
Perceba que na comparação 42 == '42', embora '42' seja uma string, a comparação retorna true! Isso acontece, porque o operador == realiza uma conversão implicita nos tipos para deixar ambos os valores com o mesmo tipo! O mesmo vale para o operador !=, ele também realiza uma conversão para deixar ambos os valores com o mesmo tipo.
Existem alguns outros casos, como na adição:
5 + '5'; // '55'
Nesse caso, o número 5 é convertido para String, e então as duas strings são “grudadas” uma na outra, resultando na string '55'.