Existe uma maneira de converter valores de NaN para 0 sem uma instrução if:
if (isNaN(a)) a = 0;
É muito chato verificar minhas variáveis todas as vezes.
javascript
Tamás Pap
fonte
fonte
function noNaN( n ) { return isNaN( n ) ? 0 : n; }
e então apenasnoNaN( a )
Respostas:
Você consegue fazer isso:
... que converterá um de qualquer valor "falsey" para
0
.Os valores "falsey" são:
false
null
undefined
0
""
(cadeia vazia)NaN
(Não é um número)Ou isso, se você preferir:
... que terá o mesmo efeito acima.
Se a intenção era testar mais do que apenas
NaN
, você pode fazer o mesmo, mas faça uma conversão paraNúmero primeiro.Isso usa o operador unário + para tentar converter
a
em um número. Isso tem o benefício adicional de converter coisas como seqüências numéricas'123'
em um número.A única coisa inesperada pode ser se alguém passa uma matriz que pode ser convertida com êxito em um número:
Aqui temos uma matriz que possui um único membro que é uma sequência numérica. Será convertido com sucesso em um número.
fonte
NaN
valor específico . Isso não funcionará como um teste para todos os valores não numéricos. Embora possamos tentar uma conversão de toNumber primeiro. Eu vou atualizar.Usar um til duplo (NÃO bit a bit duplo) -
~~
- faz algumas coisas interessantes em JavaScript. Por exemplo, você pode usá-lo em vez deMath.floor
ou mesmo como uma alternativa aoparseInt("123", 10)
! Já foi discutido muito na web, então não vou explicar por que funciona aqui, mas se você estiver interessado: O que é o operador "double til" (~~) em JavaScript?Podemos explorar essa propriedade de um duplo til para converter
NaN
em um número e, felizmente, esse número é zero!console.log(~~NaN); // 0
fonte
~~
em tudo, eu apenas utilizado ao longo do lado comparseFloat()
assim:~~parseFloat($variable);
. Muito arrumado :) +1Escreva seu próprio método e use-o onde quiser um valor numérico:
fonte
null
, não me dá o resultado esperado de0
. Mais sobre o meu ponto aqui: stackoverflow.com/questions/115548/why-is-isnannull-false-in-jsNumber(val)
pois ele retorna0
quando não consegue descobrir de qualquer maneira.Algo mais simples e eficaz para qualquer coisa:
... que converterá um de qualquer valor "falsey" para
0
.Os valores "falsey" são:
false
null
undefined
0
""
(cadeia vazia)NaN
(Não é um número)fonte
Em vez de julgá-lo para que você possa continuar, por que não voltar atrás e se perguntar por que está encontrando um NaN em primeiro lugar?
Se alguma das entradas numéricas de uma operação for NaN, a saída também será NaN. É assim que o padrão atual de ponto flutuante IEEE funciona (não é apenas Javascript). Esse comportamento é por uma boa razão : a intenção subjacente é impedir que você use um resultado falso sem perceber que é falso.
O funcionamento do NaN é que, se algo der errado em alguma sub-sub-sub-operação (produzindo um NaN nesse nível mais baixo), o resultado final também será será NaN, que você reconhecerá imediatamente como um erro, mesmo que seu a lógica de tratamento de erros (talvez jogar / capturar?) ainda não está completa.
NaN como resultado de um cálculo aritmético sempre indica que algo deu errado nos detalhes da aritmética. É uma maneira do computador dizer "é necessário depurar aqui". Em vez de encontrar uma maneira de continuar de qualquer maneira com um número que quase nunca está certo (é 0 realmente o que você quer?), Por que não encontrar o problema e corrigi-lo.
Um problema comum em Javascript é que tanto
parseInt(...)
eparseFloat(...)
retornará NaN se for dado um argumento sem sentido (null
,''
, etc). Corrija o problema no nível mais baixo possível e não em um nível superior. Então o resultado do cálculo geral tem uma boa chance de fazer sentido, e você não está substituindo um número mágico (0 ou 1 ou o que for) pelo resultado de todo o cálculo. (O truque de (parseInt (foo.value) || 0) funciona apenas para somas, não produtos - para produtos que você deseja que o valor padrão seja 1 em vez de 0, mas não se o valor especificado realmente for 0.)Talvez para facilitar a codificação, você queira que uma função recupere um valor do usuário, limpe-o e forneça um valor padrão, se necessário, da seguinte maneira:
fonte
Que tal um regex ?
O código abaixo ignorará o NaN para permitir o cálculo dos números digitados corretamente
Mostrar snippet de código
fonte
Os métodos que usam isNaN não funcionam se você estiver tentando usar parseInt, por exemplo:
Mas, no segundo caso, isNaN produz false (ou seja, a string nula é um número)
Em resumo, a cadeia nula é considerada um número válido por isNaN, mas não por parseInt. Verificado com Safari, Firefox e Chrome no OSX Mojave.
fonte
fonte
usando a solução do usuário 113716, que por sinal é ótima para evitar todos aqueles if-else, eu a implementei para calcular minha caixa de texto subtotal da unidade de caixa de texto e da quantidade de caixa de texto.
No processo de gravação de não números em caixas de texto de unidade e quantidade, seus valores são substituídos por zero para que a postagem final dos dados do usuário não possua números.
fonte
Por favor, tente esta função simples
fonte