¿Cuál es la diferencia entre parseInt (cadena) y número (cadena) en JavaScript? [duplicar]
-
14-10-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- ¿Cuál es la diferencia entre parseInt () y número ()? 10 respuestas
¿Cuál es la diferencia entre parseInt(string)
y Number(string)
en JavaScript?
Solución
parseInt("123hui")
retornos 123
Number("123hui")
retornos NaN
En otras palabras parseInt()
análisis sintácticos hasta el primer no-dígitos y devuelve lo que había analizado. Number()
quiere convertir toda la cadena en un número, que también puede ser un flotador por cierto.
editar # 1: Lucero comentó sobre el radix que se puede utilizar junto con parseInt()
. En cuanto a que se refiere, por favor vea la MÉDICO respuesta abajo (no voy a copiar aquí que, el doc tendrá una parte justa de la fama ...).
EDITAR # 2: En cuanto a los casos de uso: Eso es algo que ya están escritos entre las líneas. Uso Number()
en los casos en que indirectamente desea comprobar si la cadena dada representa por completo un valor numérico, flotador o entero. parseInt()/parseFloat()
no son tan estrictas, ya que sólo analizan a lo largo y parada cuando el valor numérico se detiene (base!), lo que hace que sea útil cuando se necesita un valor numérico en la parte delantera "en caso de que uno es" (nota que también devuelve parseInt("hui")
NaN
). Y la mayor diferencia es el uso de la base de que Number()
no conoce y parseInt()
puede adivinar indirectamente de la cadena dada (que puede causar resultados extraños a veces).
Otros consejos
La primera toma dos parámetros:
parseInt(string, radix)
El parámetro radix se utiliza para especificar qué sistema de numeración a ser utilizado, por ejemplo, un radix de 16 (hexadecimal) indica que el número en la cadena debe ser analizada de un número hexadecimal a un número decimal.
Si se omite el parámetro radix, JavaScript supone lo siguiente:
- Si la cadena comienza con "0x", la Red radix es 16 (hexadecimal)
- Si la cadena comienza con "0", el
radix es 8 (octal). Esta característica
está en desuso - Si la cadena comienza con cualquier otra valor, el radix es 10 (decimal)
La otra función que usted ha mencionado toma un solo parámetro:
Number(object)
El Número () convierte la función del argumento objeto a un número que representa el valor del objeto.
Si el valor no se puede convertir en un número legal, se devuelve NaN.
parseInt (string) va a convertir una cadena que contiene caracteres no numéricos a un número, siempre y cuando la cadena empieza con caracteres numéricos
'10px' => 10
Número (cadena) devolverá NaN si la cadena contiene caracteres no numéricos
'10px' => NaN
La función parseInt
le permite especificar una raíz de la cadena de entrada y se limita a valores enteros.
parseInt('Z', 36) === 35
El constructor Number
llamado como una función será analizar la cadena con una gramática y está limitado a la base 10 y la 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
Adición a la respuesta de @ sjngm:
Ambos también ignoran los espacios en blanco:
var foo = "3"; console.log (parseInt (foo)); // 3 console.log (Número (foo)); // 3
No es exactamente correcto. Como sjngm escribió parseInt analiza cadena al primer número. Es verdad. Pero el problema es cuando se quiere analizar el número separado con espacios en blanco, es decir. "12 345". En ese caso
parseInt("12 345")
volverá 12
en lugar de 12345
.
Así que para evitar que la situación se debe espacios en blanco de acabado antes de analizar el número .
Mi solución sería:
var number=parseInt("12 345".replace(/\s+/g, ''),10);
Aviso una cosa extra que se utiliza en parseInt () función. parseInt("string",10)
fijará el número a formato decimal . Si desea analizar la cadena como "08" se obtendría 0 porque 8 no es un número octal .Explanation es aquí
Adición a la respuesta de @ sjngm:
Ambos también ignoran los espacios en blanco:
var foo = " 3 ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3