Resumo
A função insNAN ()
determina se o valor é NaN
ou não. Tenha cuidado, essa função é quebrada. Você pode ficar interessado no Number.isNaN()
que foi definido no ECMAScript 6 ou você pode usar typeof
para determinar se o valor é Not-A-Number, NaN
.
Syntax
isNaN(testValue)
Parâmetros
testValue
O valor a ser testado.
Descrição
A necessidade da função isNaN
Ao contrário de todas as outras possibilidades de valores no JavaScript, não é possivel confiar nos operadores de igualdade (== e ===)
para determina se o valor é NaN
ou não, porque ambos, NaN == NaN e NaN === NaN
, terá como valor de retorno: false
. Daí a necessidade da funçao isNAN
.
Origem dos valores NaN
Os valores NaN
são gerados quando operações aritiméticas tem como valores: undefined ou unrepresentable. Como valores, não fazem necessariamente condições de estouro. NaN
também resulta da tentativa de coerção para valores numéricos, de valores não numéricos, para que o valor numérico primitivo seja disponível.
Por exemplo, divida zero por zero e o resultado será NaN
, mas se dividir outros números por zero ele não será.
Comportamento confuso do caso especial
Desde as primeiras versões da especificação da função isNaN , o seu comportamento para argumentos não numéricos tem sido confuso. Quando o argumento para a função isNaN
não é do tipo Number, o valor é primeiro convertido para um número. O valor resultante é em seguida testada para determinar se se trata de { { jsxref ("Global_Objects / NaN " , " NaN " ) } } . Assim, para os não- números que quando forçado ao tipo numérico resultado em um valor numérico não- NaN
válido (nomeadamente a cadeia vazia e primitivas booleanos , que quando forçada a dar valores numéricos zero ou um ), o "falso" valor retornado pode ser inesperado ; a cadeia vazia , por exemplo, é certamente " não é um número . " A confusão decorre do fato de que o termo , " não é um número " , tem um significado específico para os números representados como valores de ponto flutuante IEEE- 794 . A função deve ser interpretada como responder à pergunta: "é este valor, quando convertido para um valor numérico, um valor IEEE -794 ' não um número "?
A próxima versão do ECMAScript (ES6) contém A função Number.isNaN()
. Number.isNaN(x)
Será a real forma para testar se x é NaN ou não. Mesmo com Number.isNaN
, porém, o significado de NaN continua ser a precisão numérica, e não simplesmente, "não é um número = NaN
, not a number". Paralelamente , na expressão Number.isNaN
, a expressão (x != x)
é a forma mais confiável para testar se a variável x
é NaN
ou não, assim o resultado não é sujeitado ao falso positivo que faz isNaN
não ser confiável.
Exemplos
isNaN(NaN); // true isNaN(undefined); // true isNaN({}); // true isNaN(true); // false isNaN(null); // false isNaN(37); // false // strings isNaN("37"); // false: "37" is converted to the number 37 which is not NaN isNaN("37.37"); // false: "37.37" is converted to the number 37.37 which is not NaN isNaN(""); // false: the empty string is converted to 0 which is not NaN isNaN(" "); // false: a string with spaces is converted to 0 which is not NaN // dates isNaN(new Date()); // false isNaN(new Date().toString()); // true // Esse é um falso positivo e é a razão para isNaN não seja totalmente confiável. isNaN("blabla") // true: "blabla" é convertido para número. // A análise desse número falha e retorna NaN como resultado.
Especificações
Especificação | Status | Comentário |
---|---|---|
ECMAScript 1ª Edição. | Standard | Definição inicial. |
ECMAScript 5.1 (ECMA-262) The definition of 'isNaN' in that specification. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'isNaN' in that specification. |
Standard |
Compatibilidade com Browser
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Suporte básico | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |
Aplicação | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Suporte básico | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |