P>Pode usar frequentemente uma biblioteca utilitária javascript para a sua aplicação. Ou para acelerar o seu processo de desenvolvimento ou simplesmente para querer alguma função utilitária que esteja comprovadamente a funcionar e que tenha sido testada. Algumas bibliotecas de utilitários populares que sabemos serem lodash e underscore.

Deixar alguma vez usar a biblioteca de utilitários para validar se uma variável é um número válido? Válido significa que o valor não causará um erro ou não retornará um resultado inesperado, como NaN. Se tiver dependência lodash ou sublinhada, poderá ser tentado a usar essa função isNumber. Parece fazer exactamente isso, certo?

Vejamos tanto a função lodash como a função underscore para isNumber.

https://github.com/jashkenas/underscore/blob/e51aa7251f3e010fe003fbb9d969a74b9dcda103/underscore.js#L1325-L1330
https://github.com/lodash/lodash/blob/04ebca6c86deba0ff733847f6c11fd5265e1ce03/isNumber.js#L29-L32

ambas as bibliotecas populares têm uma implementação semelhante. Compararão a variável Javascript tipo de nome de classe com a variável string. Isto aplica-se não só ao tipo de Número mas também a outros tipos tais como Data, função, etc.

P>Pode pensar que está bem, mas sabe que NaN é também um Número em Javascript? NaN em javascript é um Número que representa o valor: Not-A-Number. Um pouco confuso, certo? Pode verificá-lo você mesmo na consola javascript.

toString.call(NaN)
// ->

Então, usando o método isNumber não é realmente a forma correcta para o caso de uso acima. Precisamos de outra validação, ou seja, verificar se o número não é NaN . Acabaremos com algo como isto.

const isValidNumber = _.isNumber(obj) && !isNaN(obj)

Então e a função isDate? O que pode potencialmente causar um problema?

Tenta iniciar o objecto Data inválido, como new Date("31/1/2019") ou new Date("test123") . O valor resultante continuará a ser um objecto de Data, mas será um objecto de Data inválido. Isso provavelmente causará uma falha na sua lógica relacionada com Data. Por conseguinte, devemos acrescentar outro passo para validar o objecto Date, talvez isto seja suficiente:

const isValidDate = _.isDate(obj) && !isNaN(obj.getTime()) 

Recap:

Deixe uma resposta

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