Existem três tipos de cinco métodos para converter dados em números em JS, incluindo:
• Coerção, os tipos de dados básicos de JS são convertidos em tipos correspondentes (Número (v)) desta forma
•Funções nativas, essas duas funções têm resultados diferentes (parseInt(v,radix), parseFloat(v))
•Conversão implícita, JS converterá a variável para o tipo correspondente (cálculo de bits, cálculo matemático) durante a execução
Os valores originais convertidos também podem ser simplesmente divididos em três categorias: objetos, valores especiais e strings.
Os valores especiais em JS incluem o seguinte.
•indefinido, indefinido, quando uma variável é declarada mas não é atribuído um valor ou o valor de um atributo que não existe em um objeto é este.
•NaN/Infinity, estes são dois "números" teimosos (typeof == number), que representam não-números e números infinitos, respectivamente. Parece inútil. Se a conversão para um número falhar, o valor de retorno será basicamente NaN.
•null, usado como um objeto com valor zero (typeof == object).
•true/false, valor booleano, representa verdadeiro ou falso, equivalente a 1/0.
Para strings, também pode ser subdividido com base no conteúdo. De acordo com as expressões numéricas JS, elas podem ser divididas em legais e ilegais. Existem várias maneiras diferentes de classificar números legais:
•Sinal: sinal positivo, sinal negativo, sem sinal
•Base: octal, decimal, hexadecimal
• Notação científica
•Decimais, números inteiros e abreviações para decimais
Com base na classificação acima, criei uma Demo para testar os resultados de diferentes métodos e conversões numéricas. A captura de tela abaixo é a conversão no Chrome.
Observando os resultados, apenas cálculos de bits podem converter qualquer valor em um número finito (isFinite). Os resultados dos cálculos matemáticos e da conversão forçada são os mesmos.
A conversão de valores especiais está relacionada ao valor original e ao método de conversão. Todas as conversões parseInt/parseFloat falham e retornam NaN.
•NaN/indefinido é convertido para NaN por outros métodos;
•Infinity é convertido para NaN por parseInt, e os demais métodos não alteram seu valor;
•null/false/true não pode ser convertido por parseInt/parseFloat e retorna NaN.
A análise de conversão de strings depende principalmente do método de conversão, mas todos os métodos não suportam números representados por octal, mas são tratados como números decimais correspondentes.
• Cálculos lógicos convertem expressões legais, exceto números hexadecimais negativos e descartam a parte decimal, retornando zero;
•Cálculo/Número matemático é semelhante ao cálculo lógico, mas não arredonda decimais; expressões ilegais que não sejam strings vazias retornam NaN.
•parseInt também retém apenas a parte inteira, mas para expressões ilegais, ele pega a parte inteira legal (decimal, hexadecimal, excluindo notação científica) na frente da string e a converte, caso contrário retorna NaN.
•parseFloat é semelhante a parseInt, exceto pelo fato de poder reconhecer e reter a parte decimal e não suportar números hexadecimais.