Quelle est la différence entre parseInt(string)
et Number(string)
en JavaScript?
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).
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:
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é.
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
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
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 casparseInt("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
Addendum à la réponse de @ sjngm:
Ils ignorent également les espaces:
var foo = " 3 ";
console.log(parseInt(foo)); // 3
console.log(Number(foo)); // 3