Diferença entre isNaN e Number.isNaN
Quase todo mundo sabe o que é `isNaN` e como usá-lo. Significa “aquela coisa que se parece com um número, realmente um número ou não?” Ele retorna verdadeiro se fornecido for “Não é um número”. Suponho que você entendeu. Ok, agora aqui está o negócio; qual é a diferença entre isNaN e Number.isNaN?
Antes de começar a explicar, quero agradecer ao meu amigo Rafael por me encorajar a escrever.
Vamos começar com isNaN. Esta é uma função global que você pode chamar de qualquer lugar. Vamos ver isso em ação:
const badDivision = 17 / "something"; // NaN
isNaN(badDivision); // true
É simples assim, mas há alguns equívocos. Aqui estão os exemplos:
Como você pode ver de acordo com a implementação de isNaN, trata o valor da string como um número e retorna o resultado com base nisso. Verifique `isNaN (‘blabla’)`
Então, para resolver esses equívocos, temos O método estático Number.isNaN vem com o EcmaScript 2015 # Number.isNaN
O que ele está fazendo?
No meu caso, tenho um método que aceita dois parâmetros como tipo de número e faço algumas animações sobre o dimensionamento do destino objeto. De alguma forma, depois de fazer pouca refatoração, tive um comportamento estranho. Sim, eu deveria ter escrito testes de unidade, que vergonha. De qualquer forma, para alguns casos o método recebe indefinidos como parâmetros. Portanto, preciso verificá-los.
Eu escrevi isto:
Meu descuido me leva à lógica errada. Porque Number.isNaN (undefined) me retornará false. (antigo isNaN (indefinido) retorna verdadeiro) Então, mudei assim:
function animate(targetScaleX, targetScaleY) {
if (!Number.isNaN(targetScaleX * targetScaleY)) {
return;
} // Do Animation
}
Então, parece estar funcionando. Mas eu queria cuidar de todas as falhas possíveis. Talvez eu receba nulo em vez de indefinido. Se eu receber um valor nulo, minha lógica falhará. Por quê?
null * null; // 0
null * 8 // 0
Acho que você está vendo. Então, eu atualizei o código assim:
Meu objetivo era comparar dois valores como indefinidos ou nulos. E minha jornada acaba escrevendo aquele artigo e atualizando meus conhecimentos. A implementação não é sofisticada, eu sei, mas a jornada foi educativa.