web-dev-qa-db-fra.com

Quelle est la différence entre parseInt (chaîne) et nombre (chaîne) en JavaScript?

Quelle est la différence entre parseInt(string) et Number(string) en JavaScript?

210
DarkLightA
parseInt("123hui")

renvoie 123

Number("123hui")

retourne NaN

En d'autres termes, parseInt() analyse jusqu'à la première valeur non numérique et renvoie ce qu'elle a analysé. Number() veut convertir la chaîne entière en un nombre, qui peut également être un BTW.


EDIT # 1: Lucero a commenté la base pouvant être utilisée avec parseInt(). En ce qui concerne cela, veuillez vous référer à réponse du médecin ci-dessous (je ne vais pas copier cela ici, le doc aura une part équitable de la renommée ...).


EDIT # 2: Concernant les cas d’utilisation: C’est déjà écrit entre les lignes. Utilisez Number() dans les cas où vous voulez vérifier indirectement si la chaîne donnée représente complètement une valeur numérique, float ou un entier. parseInt()/parseFloat() ne sont pas aussi stricts, car ils analysent et s'arrêtent lorsque la valeur numérique s'arrête (radix!), Ce qui le rend utile lorsque vous avez besoin d'une valeur numérique à l'avant "s'il y en a une" (notez que parseInt("hui") renvoie également NaN). Et la plus grande différence est l'utilisation de radix que Number() ne connaît pas et que parseInt() peut indirectement deviner à partir de la chaîne donnée (cela peut parfois entraîner des résultats étranges).

303
sjngm

Le premier prend deux paramètres:

parseInt(string, radix)

Le paramètre radix est utilisé pour spécifier le système numérique à utiliser. Par exemple, une radix de 16 (hexadécimal) indique que le nombre dans la chaîne doit être analysé d'un nombre hexadécimal à un nombre décimal.

Si le paramètre radix est omis, JavaScript suppose que:

  • Si la chaîne commence par "0x", le
    radix est égal à 16 (hexadécimal)
  • Si la chaîne commence par "0", la base est 8 (octal). Cette fonctionnalité
    est obsolète
  • Si la chaîne commence par une autre valeur, la base est 10 (décimal)

L'autre fonction que vous avez mentionnée ne prend qu'un paramètre:

Number(object)

La fonction Number () convertit l'argument d'objet en un nombre représentant la valeur de l'objet.

Si la valeur ne peut pas être convertie en un nombre légal, NaN est renvoyé.

69
THE DOCTOR

parseInt (string) convertira une chaîne en caractères non numériques, à condition que la chaîne commence par des caractères numériques

'10px' => 10

Number (string) renverra NaN si la chaîne contient des caractères non numériques.

'10px' => NaN
19
Steven Keith

La fonction parseInt vous permet de spécifier une base pour la chaîne d'entrée et est limitée aux valeurs entières.

parseInt('Z', 36) === 35

Le constructeur Number appelé en tant que fonction analysera la chaîne avec une grammaire et est limité aux bases 10 et 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 ::: n des1 2 3 4 5 6 7 8 9 
 
 ExponentPart ::: 
 ExponentIndicator SignedInteger 
 
 ExponentIndicator ::: n desE E 
 
 SignedInteger ::: 
 DecimalDigits 
 + DecimalDigits 
 - DecimalDigits 
 
 HexIntegerLiteral ::: 
 x HexDigit 
 X HexDigit 
 HexIntegerLiteral HexDigit 
 
 HexDigit ::: n des1 2 3 4 5 6 7 8 9 abcdef ABCDEF
8
ChaosPandion

Addendum à la réponse de @ sjngm:

Ils ignorent également les espaces:

var foo = "3"; console.log (parseInt (foo)); // 3 console.log (Number (foo)); // 3

Ce n'est pas tout à fait correct. Comme , sjngm a écrit parseInt analyse la chaîne en fonction du premier nombre. C'est vrai. Mais le problème est lorsque vous souhaitez analyser le numéro séparé avec des espaces, par exemple. "12 345". Dans ce cas
parseInt("12 345") renverra 12 au lieu de 12345. Donc, pour éviter cette situation, vous devez couper les espaces avant l'analyse du nombre . Ma solution serait:

     var number=parseInt("12 345".replace(/\s+/g, ''),10);

Notez une chose supplémentaire que j'ai utilisée dans la fonction parseInt (). parseInt("string",10) définira le nombre au format décimal . Si vous souhaitez analyser une chaîne telle que "08", vous obtenez 0 car 8 n'est pas un nombre octal . L'explication est ici

6
dicoder

Addendum à la réponse de @ sjngm:

Ils ignorent également les espaces:

var foo = "    3     ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3
3
Niels Bom