É possível, de alguma forma, retornar 0 em vez de NaN
analisar valores em JavaScript?
No caso de a string vazia parseInt
retornar NaN
.
É possível fazer algo assim em JavaScript para verificar NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
Ou talvez haja outra função ou plugin jQuery que possa fazer algo semelhante?
javascript
nan
Joper
fonte
fonte
NaN != NaN
,. Você precisariaisNaN(value)
.parseInt()
duas vezes (noNaN
caso positivo / normal ) nunca é uma boa ideia. Além da ineficiência, para os incautos, se tudo o que é passadotbb
é uma chamada de função com efeitos colaterais, é terrível. Eu não usaria nenhuma solução aqui onde eu vejoparseInt()
duas vezes.Respostas:
Quando não usado com valores booleanos, o
||
operador lógico OR ( ) retorna a primeira expressão (parseInt(s)
) se puder ser avaliada como verdadeira, caso contrário, retorna a segunda expressão (0). O valor de retorno deparseInt('')
é NaN. NaN é avaliado como false, portanto,num
acaba sendo definido como 0.fonte
0
vez deNaN
. Isso é resolvido pelo código de Matt perfeitamente.var nextIphone = parseInt("4S") + 1; // wow it works!
Você também pode usar a
isNaN()
função:fonte
parseInt(s)
duas vezes? Além disso, deveria serparseInt(s, 10)
parseInt()
duas vezes embora.Fiquei surpreso ao não ver ninguém mencionar o uso
Number()
. Se for concedido, ele analisará as casas decimais, se houver, e atuará de maneira diferenteparseInt()
, porém, já assume a base 10 e transformará "" ou até "" em 0.fonte
Para pessoas que não estão restritas
parseInt
, você pode usar o operador OR bit a bit (que implicitamente chamaToInt32
seus operandos).Nota:
ToInt32
é diferente deparseInt
. (ieparseInt('33Ab') === 33
)fonte
'10000000000' | 0 === 1410065408
.Math.pow(2, 31)
irá exceder .O problema
Outras respostas não levam em consideração o
0
falso e, portanto, serão 20 em vez de 0:A solução
Proponho uma função auxiliar, que resolve a maioria dos problemas:
A função auxiliar fornecerá os seguintes resultados:
fonte
parseInt(string, radix)
parseInt("0x10") === 16
parseInt("010")
8
defaultTo
função útil que faz exatamente isso:_.defaultTo(NaN, -1)
retorna-1
, mas_.defaultTo(0, -1);
retorna0
.parseInt
duas vezesNa minha opinião, use o operador +
fonte
fonte
Faça uma verificação separada para uma sequência vazia (como é um caso específico) e defina-a como zero nesse caso.
Você poderia colocar "0" no início, mas precisará adicionar um prefixo para indicar que é um número decimal e não um número octal
fonte
Por que não substituir a função? Nesse caso, você sempre pode ter certeza de que ele retornará
0
no caso deNaN
:Agora, em qualquer lugar do seu código:
fonte
|| 0
como na resposta de Matt. Vejo objetos que você não possui como último recurso ou, caso contrário, custaria significativamente mais em termos de tempo e complexidade.Eu tive um problema semelhante (firefox v34) com strings simples como:
Então eu vim com um hack rápido de:
E então ficou tudo estúpido e complicado de lidar com floats + ints para coisas não simples:
Ele retornará 0 para coisas como:
fonte
fonte
||
abordagem. Sei que essa é uma pergunta e resposta antiga, mas ela evita chamar parseInt duas vezes e usa isNaN corretamente. Ele só precisa que o radixparseInt(x, 10)
seja completo. (A minha preferência é uma variável interna separada em vez de reutilizaçãox
.)Eu criei um protótipo 2 para lidar com isso para mim, um para um número e outro para uma String.
Se você não quiser usar a verificação de segurança, use
Exemplo de uso:
fonte
Explicação, para aqueles que não consideram trivial:
A multiplicação por uma, um método chamado "conversão implícita", tenta transformar o operando de tipo desconhecido no tipo primitivo 'número'. Em particular, uma sequência vazia se tornaria o número 0, tornando-a um tipo elegível para parseInt () ...
Um exemplo muito bom também foi dado acima pelo PirateApp, que sugeriu o prefixo +, forçando o JavaScript a usar a conversão implícita do Number.
fonte
parseInt('str'*1)
parseInt
algo que já é um número? Isso implicará em outra conversão de volta à string apenas para convertê-la em número novamente.Além disso, por que não escrever uma função e chamá-la sempre que necessário. Estou assumindo que é a entrada nos campos do formulário para realizar cálculos.
o que há de errado em fazer isso?
fonte
NaN
.Aqui está um método tryParseInt que estou usando, que usa o valor padrão como segundo parâmetro para que possa ser qualquer coisa que você precise.
fonte
uma função auxiliar que ainda permite usar o radix
fonte
Você pode ter um código muito limpo, tive problemas semelhantes e resolvi-o usando:
fonte
Para outras pessoas que procuram essa solução, basta usar: ~~ sem análise, é o modo mais limpo.
Se NaN, retornará 0.
fonte