¿Es posible de alguna manera devolver 0 en lugar de NaN
analizar valores en JavaScript?
En caso de que la cadena vacía parseInt
regrese NaN
.
¿Es posible hacer algo así en JavaScript para verificar NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
¿O tal vez hay otra función o complemento jQuery que puede hacer algo similar?
javascript
nan
Joper
fuente
fuente
NaN != NaN
. Se necesitaríaisNaN(value)
.parseInt()
dos veces (en elNaN
caso no exitoso / normal ) nunca es una buena idea. Además de la ineficiencia, para los incautos, si lo que se pasatbb
es una llamada a la función con efectos secundarios, es terrible. No usaría ninguna solución aquí donde veoparseInt()
dos veces.Respuestas:
Cuando no se utiliza con valores booleanos, el
||
operador lógico OR ( ) devuelve la primera expresión (parseInt(s)
) si se puede evaluar como verdadero; de lo contrario, devuelve la segunda expresión (0). El valor de retorno deparseInt('')
es NaN. NaN se evalúa como falso, por lo quenum
termina en 0.fuente
0
lugar deNaN
. Esto se resuelve con el código de Matt perfectamente.var nextIphone = parseInt("4S") + 1; // wow it works!
También puedes usar la
isNaN()
función:fuente
parseInt(s)
dos veces? Además debería serparseInt(s, 10)
parseInt()
dos veces sin embargo.Me sorprendió no ver a nadie mencionar el uso
Number()
. De acuerdo, analizará decimales si se proporcionan, por lo que actuará de manera diferente queparseInt()
, sin embargo, ya asume la base 10 y convertirá "" o incluso "" en 0.fuente
Para las personas que no están restringidas a
parseInt
, puede usar el operador OR a nivel de bit (que implícitamente llamaToInt32
a sus operandos).Nota:
ToInt32
es diferente deparseInt
. (es decirparseInt('33Ab') === 33
)fuente
'10000000000' | 0 === 1410065408
.Math.pow(2, 31)
se desbordará.El problema
Otras respuestas no tienen en cuenta que
0
es falso, y por lo tanto, el siguiente será 20 en lugar de 0:La solución
Propongo una función auxiliar, que resuelve la mayoría de los problemas:
La función auxiliar dará los siguientes resultados:
fuente
parseInt(string, radix)
considere esto:parseInt("0x10") === 16
tambiénparseInt("010")
podría ceder8
en algunos navegadoresdefaultTo
función útil que hace exactamente esto:_.defaultTo(NaN, -1)
regresa-1
, pero_.defaultTo(0, -1);
regresa0
.parseInt
dos veces¿El trabajo es mucho más limpio que analizar? En mi opinión, use el operador +
fuente
fuente
Haga una comprobación por separado para una cadena vacía (ya que es un caso específico) y configúrela en cero en este caso.
Puede agregar "0" al inicio, pero luego debe agregar un prefijo para indicar que es un número decimal y no un número octal
fuente
¿Por qué no anular la función? En ese caso, siempre puede estar seguro de que vuelve
0
en caso deNaN
:Ahora, en cualquier parte de su código:
fuente
|| 0
como en la respuesta de Matt. Veo objetos primarios que no posee como último recurso o cuando no lo haga costaría mucho más en términos de tiempo y complejidad.Tuve un problema similar (firefox v34) con cadenas simples como:
Entonces se me ocurrió un truco rápido de:
Y luego se volvió todo estúpido complicado para lidiar con flotadores + int para cosas no simples:
Devolverá 0 para cosas como:
fuente
fuente
||
enfoque. Sé que esta es una vieja pregunta y respuesta, pero esta respuesta evita llamar a parseInt dos veces y usa isNaN correctamente. Solo necesita que la raízparseInt(x, 10)
sea completa. (Mi preferencia es una variable interna separada en lugar de reutilizarx
.)Creé un prototipo 2 para manejar esto por mí, uno para un número y otro para una Cadena.
Si no desea utilizar el control de seguridad, use
Ejemplo de uso:
fuente
Explicación, para aquellos que no lo encuentran trivial:
Multiplicando por uno, un método llamado "conversión implícita", intenta convertir el operando de tipo desconocido en el tipo primitivo 'número'. En particular, una cadena vacía se convertiría en el número 0, por lo que es un tipo elegible para parseInt () ...
PirateApp también dio un muy buen ejemplo anteriormente, quien sugirió anteponer el signo +, obligando a JavaScript a usar el número implícito.
fuente
parseInt('str'*1)
parseInt
a algo que ya es un número? Eso incurrirá en otra conversión de nuevo a cadena solo para convertir eso a número nuevamente.También de esta manera, ¿por qué no escribir una función y llamarla donde sea necesario? Supongo que es la entrada en los campos del formulario para realizar cálculos.
¿Qué pasa haciendo esto?
fuente
NaN
.Aquí hay un método tryParseInt que estoy usando, este toma el valor predeterminado como segundo parámetro, por lo que puede ser cualquier cosa que necesite.
fuente
una función auxiliar que todavía permite usar la raíz
fuente
Puede tener un código muy limpio, tuve problemas similares y lo resolví usando:
fuente
Para otras personas que buscan esta solución, simplemente use: ~~ sin parseInt, es el modo más limpio.
Si NaN, devolverá 0 en su lugar.
fuente