The Problem with Testing for NaN in JavaScript

Originally published in the a Drip of JavaScript newsletter.

em JavaScript, o valor especial NaN (significando “não um número”) é usado para representar o resultado de um cálculo matemático que não pode ser representado como um número significativo., Por exemplo:

Você também pode encontrar NaN ao usar parseInt ou parseFloat para extrair um número de uma seqüência de caracteres, como no exemplo:

Como resultado, JavaScript, os desenvolvedores muitas vezes precisa testar uma variável de resultado para ver se ele contém NaN ou se é um valor significativo, em vez disso. Existem várias maneiras diferentes de verificar se um valor é NaN, mas infelizmente a maioria deles não são confiáveis., Vamos percorrer alguns deles e ver como eles falham.

A coisa lógica a fazer é verificar se o resultado é igual a NaN.

o que se passa aqui? Em JavaScript, NaN tem a distinção de ser o único valor que não é igual a si mesmo. Isso significa que podemos”t saber se um valor é NaN verificando a igualdade de NaN porque a resposta será sempre não.o que mais podemos tentar? Que tal a função isNaN?,

impressionante! Este parece funcionar. E, na verdade, funciona em algumas circunstâncias. No entanto, apesar do nome, o propósito da função isNaN não é”para verificar se um valor é NaN. Em vez disso, o objetivo é verificar se um valor não pode ser coagido a um número. Por causa disso, pode retornar falsos positivos., Considere o seguinte:

a Menos que você esteja certo de que você vai estar lidando apenas com números ou NaN isNaN função isn”t bem adequado para esta finalidade.

no entanto, acontece que ECMAScript 6 cria uma nova função para o propósito específico de verificar se um valor é NaN. Confusingly, this function is also called isNaN, though it is attached to the Number object rather than directly to the global object., It can be used like this:

Excellent! Temos um método que realmente funciona. Infelizmente, Number.isNaN está disponível apenas em versões mais recentes do FireFox e do Chrome, e isn”t ainda suportado em IE ou outros navegadores principais. Esta pode ser uma abordagem viável no futuro, mas para já só pode ser utilizada em circunstâncias muito estreitas.

talvez possamos verificar NaN“s type instead?

Sim, você”re leitura isso corretamente., Em JavaScript, o valor NaN é do tipo number. Isso não vai ser muito útil.

então o que podemos fazer para obter algo que funciona corretamente, mas também está disponível cross-browser? Lembre-se de como mencionei que NaN é o único valor em JavaScript que não é igual a si mesmo? Podemos aproveitar esse facto.

atualmente a melhor maneira de verificar se um valor é NaN é verificar se ele não é igual a si mesmo. Se sim, então você sabe que é NaN.,

é claro, usando esta técnica não é”especialmente legível, por isso é comum envolvê-lo em um método de utilidade que comunica a intenção mais claramente. Tanto o Underscore quanto o Lo-Dash fornecem implementações.espero que isto o tenha ajudado a compreender melhor as peculiaridades de NaN.obrigado pela leitura!Josh Clanton

Deixe uma resposta

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