number - tryparse javascript
¿Cuál es la diferencia entre parseInt(string) y Number(string) en JavaScript? (6)
Addendum a la respuesta de @sjngm:
Ambos también ignoran el espacio en blanco:
var foo = "3"; console.log (parseInt (foo)); // 3 console.log (Number (foo)); // 3
No es exactamente correcto Como sjngm escribió parseInt analiza la cadena al primer número. Es verdad. Pero el problema es cuando quieres analizar el número separado con espacios en blanco, es decir. "12 345". En ese caso
parseInt("12 345")
devolverá 12
lugar de 12345
. Para evitar esa situación, debe recortar espacios en blanco antes de analizar el número . Mi solución sería:
var number=parseInt("12 345".replace(//s+/g, ''''),10);
Observe una cosa adicional que utilicé en la función parseInt (). parseInt("string",10)
configurará el número a formato decimal . Si analiza cadena como "08" obtendría 0 porque 8 no es un número octal. La explicación está here
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la diferencia entre parseInt(string)
y Number(string)
en JavaScript?
Addendum a la respuesta de @sjngm:
Ambos también ignoran el espacio en blanco:
var foo = " 3 ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3
El primero toma dos parámetros:
parseInt(string, radix)
El parámetro radix se utiliza para especificar qué sistema numérico se utilizará, por ejemplo, una raíz de 16 (hexadecimal) indica que el número en la cadena se debe analizar de un número hexadecimal a un número decimal.
Si se omite el parámetro radix, JavaScript asume lo siguiente:
- Si la cadena comienza con "0x", la
radix es 16 (hexadecimal) - Si la cadena comienza con "0", la raíz es 8 (octal). Esta característica
es obsoleto - Si la cadena comienza con cualquier otro valor, la raíz es 10 (decimal)
La otra función que mencionaste toma solo un parámetro:
Number(object)
La función Number () convierte el argumento del objeto en un número que representa el valor del objeto.
Si el valor no se puede convertir a un número legal, se devuelve NaN.
La función parseInt
permite especificar una variedad de radios para la cadena de entrada y está limitada a valores enteros.
parseInt(''Z'', 36) === 35
El constructor Number
llamado como función analizará la cadena con una gramática y está limitada a base 10 y base 16.
StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt StrWhiteSpaceChar ::: WhiteSpace LineTerminator StrNumericLiteral ::: StrDecimalLiteral HexIntegerLiteral StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity DecimalDigits . DecimalDigitsopt ExponentPartopt . DecimalDigits ExponentPartopt DecimalDigits ExponentPartopt DecimalDigits ::: DecimalDigit DecimalDigits DecimalDigit DecimalDigit ::: one of 0 1 2 3 4 5 6 7 8 9 ExponentPart ::: ExponentIndicator SignedInteger ExponentIndicator ::: one of e E SignedInteger ::: DecimalDigits + DecimalDigits - DecimalDigits HexIntegerLiteral ::: 0x HexDigit 0X HexDigit HexIntegerLiteral HexDigit HexDigit ::: one of 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
parseInt (cadena) convertirá una cadena que contiene caracteres no numéricos en un número, siempre que la cadena comience con caracteres numéricos
''10px'' => 10
Number (cadena) devolverá NaN si la cadena contiene caracteres no numéricos
''10px'' => NaN
parseInt("123hui")
devuelve 123
Number("123hui")
devuelve NaN
En otras palabras, parseInt()
analiza hasta el primer dígito que no sea y devuelve lo que haya analizado. Number()
quiere convertir toda la cadena en un número, que también puede ser flotante BTW.
EDIT # 1: Lucero comentó sobre el radix que se puede usar junto con parseInt()
. En lo que respecta a eso, ve la respuesta de THE DOCTOR a continuación (no voy a copiar eso aquí, el doc tendrá una parte justa de la fama ...).
EDIT # 2: En cuanto a los casos de uso: Eso ya está escrito entre líneas. Utilice Number()
en los casos en los que indirectamente quiera verificar si la cadena dada representa completamente un valor numérico, flotante o entero. parseInt()/parseFloat()
no son tan estrictos ya que solo analizan y detienen cuando el valor numérico se detiene (¡radix!), lo que lo hace útil cuando se necesita un valor numérico en la parte frontal "en caso de que exista uno" ( tenga en cuenta que parseInt("hui")
también devuelve NaN
). Y la mayor diferencia es el uso de radix que Number()
no conoce y parseInt()
puede adivinar indirectamente a partir de la cadena dada (que a veces puede causar resultados extraños).