Eu só tentei no console JavaScript do Firefox, mas nenhuma das seguintes afirmações retornam verdadeiras:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
javascript
nan
Paul D. Waite
fonte
fonte
Respostas:
Tente este código:
Para verificar se algum valor é NaN, em vez de apenas números, veja aqui: Como você testa NaN em Javascript?
fonte
NaN
, então sim. (Não estou dizendo que você sempre seria.)isNaN(parseFloat("geoff")) // true
isNaN(parseFloat("10geo")) // false
Como isso é útil?Acabei de encontrar essa técnica no livro JavaScript eficaz, que é bem simples:
Como NaN é o único valor JavaScript tratado como desigual para si mesmo, você sempre pode testar se um valor é NaN verificando se há igualdade entre si:
Não percebi isso até @allsyed comentou, mas isso está na especificação da ECMA: https://tc39.github.io/ecma262/#sec-isnan-number
fonte
Use este código:
Veja os
isNaN()
documentos no MDN .fonte
var value = 0/0;
evar value2= String("123 131");
cria valores de NaN e algo assimvar value3 = "abcd";
também é um valor de NaN.Na medida em que um valor do tipo Number deve ser testado, seja ele
NaN
ou não, a função globalisNaN
fará o trabalhoPara uma abordagem genérica que funciona para todos os tipos em JS, podemos usar qualquer um dos seguintes:
Para usuários do ECMAScript-5:
Para pessoas que usam o ECMAScript-6:
E, para fins de consistência nos dois ECMAScript 5 e 6, também podemos usar esse polyfill para Number.isNan
por favor, verifique esta resposta para mais detalhes.
fonte
isNaN
converte o argumento em um valor numérico primeiro.NaN é um valor especial que não pode ser testado assim. Uma coisa interessante que eu só queria compartilhar é essa
Isso retorna verdadeiro apenas para valores de NaN e é uma maneira segura de testar. Definitivamente deve ser envolvido em uma função ou pelo menos comentado, porque obviamente não faz muito sentido testar se a mesma variável não é igual uma à outra, hehe.
fonte
Você deve usar a
isNaN(value)
chamada de função global , porque:Exemplos:
Eu espero que isso te ajude.
fonte
isNaN('') //false
masparseInt('') //NaN
. O mesmo pode ser ditonull
.No ES6 ,
Object.is(..)
é um novo utilitário que pode ser usado para testar dois valores de igualdade absoluta:fonte
Para corrigir o problema em que
'1.2geoff'
é analisado, basta usar oNumber()
analisador.Então, ao invés disso:
Faça isso:
Edição: Acabei de notar outro problema com isso embora ... valores falsos (e verdadeiro como um verdadeiro booleano) passaram em
Number()
retorno como0
! Nesse caso, parseFloat funciona sempre. Então, volte a isso:E isso cobre aparentemente tudo. Comparei-o em 90% mais lento que o de Lodash,
_.isNaN
mas esse não cobre todos os NaN:http://jsperf.com/own-isnan-vs-underscore-lodash-isnan
Só para ficar claro, o meu cuida da interpretação literal humana de algo que é "Não é um Número" e o lodash's cuida da interpretação literal do computador de verificar se algo é "NaN".
fonte
Embora a resposta de @chiborg esteja correta, há mais coisas a serem observadas:
A propósito, se você estiver usando esse método para validação de entrada, o resultado será bastante liberal.
Portanto, sim, você pode usar
parseFloat(string)
(ou no caso de números completosparseInt(string, radix)
'e, posteriormente, agrupá-lo comisNaN()
, mas esteja ciente da pegadinha com números entrelaçados com caracteres não numéricos adicionais.fonte
parseFloat('test1.2')
retornaráNaN
.Solução Simples!
REALMENTE super simples! Aqui! Tenha esse método!
Use tão simples quanto:
Exemplo:
Existem alguns caminhos alternativos para a implementação, se você não quiser usar um método com nome alternativo e desejar garantir que ele esteja disponível globalmente. Aviso Essas soluções envolvem a alteração de objetos nativos e podem não ser a melhor solução. Sempre tenha cuidado e esteja ciente de que outras bibliotecas que você pode usar podem depender do código nativo ou de alterações semelhantes.
Implementação alternativa 1: Substitua o
isNaN
método nativo .Implementação alternativa 2: anexar ao objeto de número
* Sugerido, pois também é um preenchimento múltiplo para ECMA 5 a 6
Teste de solução alternativa se vazio
Um método simples de janela que escrevi para testar se o objeto está vazio . É um pouco diferente, pois não indica se o item é "exatamente" NaN , mas imaginei que iria vomitar isso, pois também pode ser útil ao procurar itens vazios.
Exemplo:
Mostrar snippet de código
Verificação extremamente profunda se estiver vazia
Este último é um pouco profundo, até verificando se um Objeto está cheio de Objetos em branco. Tenho certeza de que há espaço para melhorias e possíveis poços, mas até agora parece que ele captura quase tudo.
Mostrar snippet de código
fonte
isNaN
NÃO é confiável. Fui comentado lá e disse que essa pergunta se adequaria melhor à minha resposta, movendo-a para aqui. Basta colocar algo útil / útil em relação a esse problema que aparecerá na pesquisa do Google em questãois it NaN?
,. Na nota lateral, minha resposta seria mais precisa com mais frequência do que a resposta selecionada.Eu só quero compartilhar outra alternativa, não é necessariamente melhor do que outras aqui, mas acho que vale a pena olhar:
A lógica por trás disso é que todos os números, exceto
0
eNaN
lançados paratrue
.Fiz um teste rápido e funciona tão bem quanto
Number.isNaN
e verificando se é falso. Todos os três têm melhor desempenho do queisNan
Os resultados
Pode se tornar útil se você quiser evitar a
isNaN
função interrompida .fonte
Se seu ambiente suportar o ECMAScript 2015 , convém usar
Number.isNaN
para garantir que o valor seja realmenteNaN
.O problema
isNaN
é que, se você usar isso com dados não numéricos, existem poucas regras confusas (conforme o MDN). Por exemplo,Portanto, em ambientes suportados pelo ECMA Script 2015, convém usar
fonte
isNaN
poderia colocar você em problemas e lembre-se de usarNumber.isNaN
em ECMAScript 2015 ambientes :-)NaN em JavaScript significa "Não é um número", embora seu tipo seja realmente número.
Para verificar se uma variável tem o valor NaN, não podemos simplesmente usar a função isNaN (), porque isNaN () tem o seguinte problema, veja abaixo:
O que realmente acontece aqui é que myVar é implicitamente coagido a um número:
Na verdade, faz sentido, porque "A" na verdade não é um número. Mas o que realmente queremos verificar é se myVar tem exatamente o valor NaN.
Então isNaN () não pode ajudar. Então, o que devemos fazer?
Tendo em conta que NaN é o único valor JavaScript que é tratado de forma desigual, podemos verificar sua igualdade usando: ==
Então, para concluir , se é verdade que uma variável! == em si, então essa variável é exatamente do valor NaN:
fonte
Eu uso a
isNaN
função de sublinhado porque em JavaScript:Pelo menos, esteja ciente disso.
fonte
undefined
é um comportamento incorreto? É verdade queundefined
não é um número, não é?undefined
pode ser diferente algo queNaN
, no entanto, ainda não é um número tãoisNaN(undefined)
deve ser (e é)true
Talvez também isso:
fonte
Parece que isNaN () não é suportado no Node.js imediatamente.
Eu trabalhei com
fonte
fonte
Veja a documentação do Mozilla A propriedade NaN global é um valor que representa Not-A-Numbe
A melhor maneira é usar 'isNaN ()', que é a função de entrada para verificar NaN. Todos os navegadores suportam o caminho ..
fonte
A regra é:
O problema da função isNaN () é que ela pode retornar resultados inesperados em alguns casos:
Uma maneira melhor de verificar se o valor é realmente NaN é:
fonte
De acordo com a IEEE 754, todas as relações envolvendo NaN são avaliadas como falsas, exceto! =. Assim, por exemplo, (A> = B) = falso e (A <= B) = falso se A ou B ou ambos são / são NaN.
fonte
Escrevi esta resposta para outra pergunta no StackOverflow, onde outra verifica quando,
NaN == null
mas depois foi marcada como duplicada, para não desperdiçar meu trabalho.Veja a Mozilla Developer Network sobre
NaN
.Resposta curta
Basta usar
distance || 0
quando quiser ter certeza de que o valor é um número adequado ouisNaN()
verificar.Resposta longa
O NaN (não é um número) é um objeto global esquisito em javascript frequentemente retornado quando alguma operação matemática falha.
Você queria verificar se
NaN == null
quais resultadosfalse
. MaisNaN == NaN
resultados ainda comfalse
.Uma maneira simples de descobrir se a variável é
NaN
é uma função globalisNaN()
.Outro é
x !== x
que só é verdadeiro quando x é NaN. (obrigado por lembrar a @ raphael-schweikert)Mas por que a resposta curta funcionou?
Vamos descobrir.
Quando você chama
NaN == false
o resultado é ofalse
mesmo comNaN == true
.Em algum lugar nas especificações, o JavaScript tem um registro com valores sempre falsos, que inclui:
NaN
- Não é um número""
- string vaziafalse
- um falso booleanonull
- objeto nuloundefined
- variáveis indefinidas0
- 0 numérico, incluindo +0 e -0fonte
var xIsNaN = x !== x;
isso só é verdadeiro se x forNaN
.Outra solução é mencionada na página parseFloat do MDN
Ele fornece uma função de filtro para fazer uma análise rigorosa
E então você pode usar
isNaN
para verificar se éNaN
fonte
A maneira exata de verificar é:
fonte
Eu criei essa pequena função que funciona como um encanto. Em vez de procurar por NaN, que parece ser contra-intuitivo, você verifica um número. Tenho certeza de que não sou o primeiro a fazê-lo dessa maneira, mas pensei em compartilhar.
fonte
Encontrado de outra maneira, apenas por diversão.
fonte
A resposta de marksyzm funciona bem, mas não retorna falso,
Infinity
pois o Infinito não é tecnicamente um número.Eu vim com uma
isNumber
função que irá verificar se é um número.UPDATE: notei que esse código falha em alguns parâmetros, por isso o melhorei.
fonte
Isso não é elegante. mas depois de tentar isNAN () cheguei a esta solução, que é outra alternativa. Neste exemplo, eu também permiti '.' porque eu estou mascarando para flutuar. Você também pode reverter isso para garantir que nenhum número seja usado.
Essa é uma avaliação de caractere único, mas você também pode fazer um loop através de uma sequência para verificar se há números.
fonte
Você pode verificar o NaN usando a função javascript isNaN. Apenas passando o número ou valor para a função isNaN
fonte
Basta converter o resultado em String e comparar com 'NaN'.
fonte
É (NaN> = 0) ? ...... " Eu não sei ".
As condições são executadas apenas se TRUE .
Não em FALSO .
Não em " Eu não sei ".
fonte