¿Cuál es la diferencia entre parseInt (cadena) y número (cadena) en JavaScript? [duplicar]

StackOverflow https://stackoverflow.com/questions/4564158

  •  14-10-2019
  •  | 
  •  

Pregunta

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la diferencia entre parseInt(string) y Number(string) en JavaScript?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top