Cualquier número, es número. La cadena parece un número, es un número. Todo lo demás, va NaN.
'a' => NaN
'1' => 1
1 => 1
javascript
beatak
fuente
fuente
'1a'
cuerda? Con' 1'
uno? En otras palabras, ¿por qué los métodos más comunes para hacer eso (Number(x)
yparseInt(x, 10)
) no son suficientes para usted?Respuestas:
Hay 4 formas de hacerlo hasta donde yo sé.
Según esta prueba rápida que hice, en realidad depende de los navegadores.
http://jsperf.com/best-of-string-to-number-conversion/2
Implicit
marcó el más rápido en 3 navegadores, pero hace que el código sea difícil de leer ... ¡Así que elige lo que quieras!fuente
1*
para la conversión de fecha a número, que es similar a la+
anterior. es decir, en1*new Date()
lugar de+new Date()
. ¿Posiblemente es más legible?1*
es preferible porque es menos propenso a errores. Una variable colgante no deseada antes+1
no es un error de análisis. Es un truco similar a usarif (MYCONSTANT == myvar)
enC
.Hay al menos 5 formas de hacer esto:
Si desea convertir solo a enteros, otra forma rápida (y corta) es el doble bit a bit (es decir, usando dos caracteres tilde):
p.ej
~~x;
Referencia: http://james.padolsey.com/cool-stuff/double-bitwise-not/
Las 5 formas comunes que conozco hasta ahora para convertir una cadena en un número tienen sus diferencias (hay más operadores bit a bit que funcionan, pero todos dan el mismo resultado que
~~
). Este JSFiddle muestra los diferentes resultados que puede esperar en la consola de depuración: http://jsfiddle.net/TrueBlueAussie/j7x0q0e3/22/Consola de depuración:
La
~~x
versión da como resultado un número en "más" casos, donde otros a menudo dan como resultadoundefined
, pero falla por una entrada no válida (por ejemplo, regresará0
si la cadena contiene caracteres que no son números después de un número válido).Desbordamiento
Tenga en cuenta: puede ocurrir un desbordamiento de enteros y / o truncamiento de bits
~~
, pero no con las otras conversiones. Si bien es inusual ingresar valores tan grandes, debe ser consciente de esto. Ejemplo actualizado para incluir valores mucho más grandes.Algunas pruebas de rendimiento indican que el estándar
parseInt
y lasparseFloat
funciones son en realidad las opciones más rápidas, presumiblemente altamente optimizadas por los navegadores, pero todo depende de sus requisitos, ya que todas las opciones son lo suficientemente rápidas : http://jsperf.com/best-of-string-to -conversión-número / 37Todo esto depende de cómo se configuren las pruebas de rendimiento, ya que algunos muestran que parseInt / parseFloat es mucho más lento.
Mi teoría es:
fuente
~~4294967296
devoluciones0
.Prefije la cadena con el
+
operador.fuente
Una forma rápida de convertir cadenas a un entero es usar un bit a bit o, de esta manera:
Si bien depende de cómo se implemente, en teoría debería ser relativamente rápido (al menos tan rápido como
+x
) ya que primero emitiráx
un número y luego realizará un muy eficiente o.fuente
Aquí hay una manera simple de hacerlo: var num = Number (str); en este ejemplo, str es la variable que contiene la cadena. Puede probar y ver cómo funciona abierto: herramientas para desarrolladores de Google Chrome , luego vaya a la consola y pegue el siguiente código. lea los comentarios para comprender mejor cómo se realiza la conversión.
fuente
Me parece que
num * 1
es simple, claro y funciona para enteros y flotantes ...fuente
Probablemente esto no sea tan rápido, pero tiene el beneficio adicional de asegurarse de que su número tenga al menos un cierto valor (por ejemplo, 0), o como máximo un cierto valor:
Si necesita asegurar un valor mínimo, generalmente lo haría
Math.max(..., 0)
te salva de escribir dos declaraciones.fuente
Math.abs(input)
? También convierte cadenas en números positivos y guarda algunos caracteres adicionales.input
no se puede convertir al número que obtendráNaN
¡Puede intentar usar UnitOf , una biblioteca de conversión de medidas y tipos de datos que acabamos de lanzar oficialmente! UnitOf es súper rápido, pequeño y eficiente en la conversión de cualquier tipo de datos sin arrojar un error o nulo / indefinido. Los valores predeterminados que defina o los valores predeterminados de UnitOf se devuelven cuando una conversión no tiene éxito.
fuente
La forma más rápida es usar -0:
fuente