Números são um tipo primitivo em JavaScript, mas a simples utilização do tipo de número não irá diferenciar números de NaN ou Infinity.
É útil saber como verificar se um valor é do tipo primitivo número, uma vez que o JavaScript é uma linguagem dinamicamente dactilografada.
A forma mais fácil de verificar um número é usando typeof
, que retornará a string "number"
para qualquer valor do tipo primitivo do número, incluindo NaN
Infinity
, e -Infinity
.
Um exemplo quando um número pode aparecer como outro tipo, indicando um erro no meu código, seria na moeda de análise:
Neste caso, eu saberia que me esqueci de analisar a string num número quando obtive o valor de “string
” de typeof
.
Se eu usar parseFloat()
para verificar o valor da moeda, mas esqueci-me de tirar o símbolo da moeda, recebo um parse falhado e um resultado estranho:
Oh, não. Neste caso, parece que typeof
não está a funcionar como eu esperava – porque NaN
os valores são considerados números em JavaScript.
Quando o tipo de palavra-chave retorna “número”
Uma solução óbvia para verificar o tipo primitivo do número é usar a typeof
palavra-chave, como mostrei acima.
mas typeof
é uma solução incompleta, devido a dois valores especiais em JavaScript: NaN
(“Não é um Número”) e Infinity
.
Para o meu exemplo de moeda, sei que tenho um bug se o meu valor monetário for NaN
ou Infinity
, mas typeof
devolve "number"
para ambos os valores.
Talvez a minha entrada tenha sido escrita usando um símbolo de moeda, e eu simplesmente tentei usar parseFloat()
para capturar o valor. Isso resultaria em NaN
:
Uma função isNumber() personalizada
Arobust, custom isNumber()
function would use typeof
to check for the primitive type, check for NaN
values, and check for Infinity
:
Or, no caso em que se esteja confiante de que NaN
e Infinity
não vão aparecer, basta verificar que typeof==="number"
seria suficiente.

The oneliner
Eu adoro os one-liners. Penso que precisam de ser documentados com comentários, mas penso que são realmente úteis, e não apenas extravagantes.
Aqui está o forro de uma linha para saber como verificar um número em JavaScript:
But, existe uma forma melhor de verificar um número finito em JavaScript – a função auxiliar Number.isFinite()
tem o mesmo comportamento que a função personalizada isNumber()
que eu escrevi. Incluo um exemplo na secção seguinte.
A forma mais fácil de verificar um número: Number.isFinite()
Na realidade, é desnecessário escrever funções personalizadas para verificar um número, embora seja uma forma instrutiva de lembrar que os valores JavaScript Infinity
-Infinity
, e NaN
são todos do tipo primitivo do número.
“O método
Number.isFinite()
determina se o valor passado é um número finito”. – MDN Docs
O método Number.isFinite()
irá retornar true
para números finitos, e false
for Infinity
-Infinity
, e NaN
– exactamente o que queremos:
Há também a função global isFinite()
, que executará a coerção do tipo (tal como coercing strings a números), como mostrado acima.
Discutamos estes métodos em profundidade no meu artigo sobre Infinity
em The Startup:
Verifica se uma variável é um número inteiro
Para verificar se a variável A é um número inteiro poderia usar o operador de igualdade solto ==
para ver se o valor parsed é igual a si próprio.
O seguinte trecho de código dá um exemplo de como verificar se um inteiro é um número inteiro:
Utilizando typeof
diferenciaria uma string que está a ser coagida a um número de um número real, tal como o operador de igualdade rigorosa ===
.
h2>Tirar símbolos de moeda
Para um melhor, função mais robusta, posso querer retirar primeiro os símbolos da moeda (como o símbolo do dólar e quaisquer vírgulas).
A análise detalhada do dinheiro usando expressões regulares em JavaScript está fora do âmbito deste artigo, mas este código remove $
e ,
antes de analisar:
Nota que as funções globais parseInt()
e parseFloat()
irão coagir valores a cordas, se necessário, e retornará NaN
se a coerção falhar.
Existem também as funções Numbers.parseInt()
e Number.parseFloat()
, que têm o mesmo comportamento exacto.
De acordo com os documentos MDN, essas funções duplicadas foram adicionadas ao ECMAScript 2015 para a “modularização da finalidade dos globais”.”
O JavaScript tem de facto números inteiros separados?
Não, o JavaScript tem apenas um tipo de número, que é representado internamente como uma representação de ponto flutuante de 64 bits.
Esse ponto flutuante é o número do tipo de dados primitivo, e há também um tipo chamado BigInt que pode ser usado para números arbitrariamente grandes.
As funções globais parseInt()
e parseFloat()
diferem naquilo que esperam e irão produzir, mas não porque existem de facto tipos de inteiros e de ponto flutuante separados em JavaScript.
>>>figcaption>Photo by Volkan Olmez on Unsplashh2>Conclusion
A verificação de um número em JavaScript não é particularmente complicada – typeof
funciona basicamente como deve ser, desde que se esteja ciente que tanto NaN
como Infinity
têm o typeof
número.
A forma mais fácil de verificar um número finito (ou seja não NaN
ou Infinity
) em JavaScript está a usar Number.isFinite()
, o que não coage valores a números, ou o global isFinite()
, o que executa coerção de tipo.
Checking for an integer specifically involves using the parseInt()
function, followed by comparing the parsed value to itself using ==
(which will type coerce non-number values, such as strings to numbers) or ===
(which will return true only if both values are numbers).
Acima do capô, os inteiros e os flutuadores são todos iguais: o JavaScript só tem um tipo de número, o tipo primitivo de número.
>/div>
Outra leitura
>ul>>li> A função Number.isInteger()
não coagula os números:ul>>>li> Sumit Kumar Pradhan escreveu sobre a verificação de números no Dev.to:>ul>>li> Chris Ferdinandi discutindo números de análise no seu blog de baunilha JS:>ul>>>li> A expressão regular ^+(\.{1,2})?$
combina dinheiro:>ul>>>li> Sarah Dayan escreveu sobre análise de dinheiro em JavaScript em frontstuff: