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


Esta pregunta ya tiene una respuesta aquí:

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

Author: Brett, 2010-12-30

6 answers

parseInt("123hui")

Devuelve 123

Number("123hui")

Devuelve NaN

En otras palabras parseInt() analiza hasta el primer dígito no y devuelve lo que haya 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 la raíz que se puede usar junto con parseInt(). En cuanto a esto, por favor ver La respuesta del MÉDICO a continuación (no voy a copiar que aquí, el doc tendrá una parte justa de la fama...).


EDIT #2: Con respecto a los casos de uso: Eso ya está escrito entre líneas. Use Number() en los casos en los que indirectamente desee verificar si la cadena dada representa completamente un valor numérico, flotante o entero. parseInt()/parseFloat() no son tan estrictos, ya que simplemente analizan y se detienen cuando el valor numérico se detiene (¡radix!), lo que lo hace útil cuando necesita un valor numérico en el frente "en caso de que haya 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).

 269
Author: sjngm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:17

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 radix de 16 (hexadecimal) indica que el número en la cadena debe analizarse 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", el
    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 otro valor, la raíz es 10 (decimal)

La otra función que mencionaste solo toma 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 en un número legal, se devuelve NaN.

 67
Author: THE DOCTOR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-30 16:13:24

ParseInt (string) convertirá una cadena que contenga caracteres no numéricos en un número, siempre y cuando la cadena comience con caracteres numéricos

'10px' => 10

Number (string) devolverá NaN si la cadena contiene caracteres no numéricos

'10px' => NaN
 19
Author: Steven Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-30 16:21:17

La función parseInt le 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 una función analizará la cadena con una gramática y está limitado 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
 7
Author: ChaosPandion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-30 16:22:49

Anexo a la respuesta de @sjngm:

Ambos también ignoran los espacios en blanco:

Var foo = "3"; consola.log (parseInt (foo)); / / 3 consola.log (Number (foo)); / / 3

No es exactamente correcto. As sjngm wrote parseInt analiza la cadena al primer número. Es verdad. Pero el problema es cuando desea analizar el número separado con espacios en blanco ie. "12 345". En ese caso
parseInt("12 345") devolverá 12 en lugar de 12345. Así que para evitar que situación debe recortar los 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 extra que usé en la función parseInt (). parseInt("string",10) establecerá el número en formato decimal. Si analizaras una cadena como " 08 " obtendrías 0 porque 8 no es un número octal.La explicación es aquí

 6
Author: dicoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-21 11:55:05

Anexo 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
 3
Author: Niels Bom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-16 16:04:29