Conversões de Dados - JavaScript
Frequentemente surge a necessidade de converter um tipo de dado em outro. Algumas conversões em JavaScript são realizadas automaticamente. Por exemplo:
const number1 = "56";
const number2 = 4;
const result = number1 + number2;
console.log(result); // 564
Aqui, a constante number1 é uma string, mais precisamente uma representação em string de um número. A constante number2 é um número. E, no final, obtemos não o número 60
"564"
Quando ocorre a adição, as conversões em JavaScript são feitas seguindo o princípio:
Se ambos os operandos são números, ocorre a adição aritmética normal.
Se a condição anterior não é atendida, ambos os operandos são convertidos em strings e ocorre a concatenação.
Consequentemente, no exemplo acima, uma vez que o primeiro operando é uma string, o segundo operando - um número - também é convertido em string, resultando na string "564", e não no número 60. De fato, o que ocorre é:
const number1 = "56";
const number2 = 4;
const result = number1 + String(number2);
console.log(result); // 564
A expressão String(number2)
number2
No entanto, o comportamento padrão nem sempre pode ser desejável. Por exemplo, no caso mencionado, podemos querer que os valores se somem como números, não como strings. Nesse caso, podemos usar funções de conversão.
parseInt()
Para converter uma string em um número inteiro, usa-se a função parseInt()
const number1 = "56";
const number2 = 4;
const result = parseInt(number1) + number2;
console.log(result); // 60
Além disso, a string pode ter conteúdo misturado, por exemplo, "123hello", onde há números, mas também caracteres comuns. A função parseInt()
const num1 = "123hello";
const num2 = parseInt(num1);
console.log(num2); // 123
É importante considerar que o valor sendo convertido em número é sempre convertido em string primeiro. Isso pode levar a resultados inesperados à primeira vista:
const number1 = parseInt(0.000005); // 0;
console.log(number1);
const number2 = parseInt(0.0000005); // 5
console.log(number2);
Nos casos acima, números fracionários são passados para a função parseInt() e esperamos obter o número 0 em ambos os casos. No entanto, ao converter number2
Para números fracionários menores que 10-6 (0.000001), a notação exponencial é aplicada, ou seja, o número 0.0000005 é representado como 5e-7
O mesmo se aplica a números muito grandes, como 999999999999999999999, que também são representados em forma exponencial.
NaN e isNaN
Se a função parseInt()
NaN
console.log(parseInt("abc")); // NaN
const type = typeof NaN;
console.log(type); // number
Curiosamente, o próprio valor NaN
number
Por meio da função especial isNaN()
true
false
const num1 = "javascript";
const num2 = "22";
let result = isNaN(num1);
console.log(result); // true - num1 não é um número
result = isNaN(num2);
console.log(result); // false - num2 é um número
parseFloat
Para converter strings em números fracionários, utiliza-se a função parseFloat()
const number1 = "46.07";
const number2 = "4.98";
let result = parseFloat(number1) + parseFloat(number2);
console.log(result); // 51.05
Conversão de String para Número e o Operador +
É importante notar que, para converter uma string em número em JavaScript, podemos usar o operador unário +
const number1 = "56";
const number2 = 4;
const result = +number1 - number2;
console.log(result); // 52
Aqui, a expressão +number1 converte a string "56" em número 56.
Se precisarmos obter uma representação negativa do número, de maneira semelhante, usamos o sinal unário de menos (como diante de números negativos):
const number1 = "56";
const number2 = 4;
const result = -number1 - number2; // -56 - 4 = -60
console.log(result); // -60
No entanto, nos exemplos acima, a string number1 poderia ser convertida em números. Se isso não for possível, o resultado da conversão será NaN
const number1 = "56hek";
console.log(+number1); // NaN