Como verificar um número em JavaScript

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.

23 de Setembro, 2019 – 6 min ler

Photo by Alex Chambers on Unsplash

É ú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 NaNInfinity, 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.

div>>

Photo de Samuel Zeller em Unsplash

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.

Photo by Gemma Evans on Unsplash

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:

>div>>

Photo by Timo Kaiser on Unsplash

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.

div>

Photo por 🇨🇭 Claudio Schwarz | @purzlbaum on Unsplash

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.

div>

Foto por Bernard Hermant em Unsplash

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:

Photo by Bogomil Mihaylov on Unsplash

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 ===.

div>

Foto por Markus Spiske em Unsplash

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”.”

Foto por Toa Heftiba em Unsplash

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.

div>>

>>>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>

>/div>

Photo by K. Mitch Hodge on Unsplash

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:

div>

Photo por Alejandro Ortiz em Unsplash

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *