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

comment parseInt() et Number() se comportent-ils différemment lors de la conversion de chaînes en nombres?

250
demandé sur Paul Roub 2010-11-03 21:48:17

8 réponses

Eh bien, ils sont sémantiquement différent , le Number constructeur appelé comme une fonction effectue conversion de type et parseInt effectue parsing , p.ex.:

// parsing:
parseInt("20px");       // 20
parseInt("10100", 2);   // 20
parseInt("2e1");        // 2

// type conversion
Number("20px");       // NaN
Number("2e1");        // 20, exponential notation

gardez à l'esprit que si parseInt détecte un zéro principal sur la chaîne, il analysera le nombre en base octale, cela a changé le ECMAScript 5, la nouvelle version de la norme, mais il faudra beaucoup de temps pour obtenir dans les implémentations de navigateur (c'est une incompatibilité avec ECMAScript 3), aussi parseInt ignorera les caractères traînants qui ne correspondent à aucun chiffre de la base actuellement utilisée.

le Number constructeur ne détecte pas octals:

Number("010");         // 10
parseInt("010");       // 8, implicit octal
parseInt("010", 10);   // 10, decimal radix used

mais il peut traiter des nombres en notation hexadécimale, tout comme parseInt :

Number("0xF");   // 15
parseInt("0xF"); //15

en outre, une construction largement utilisée pour effectuer la conversion de type numérique, est le unary + opérateur (p. 72) , il est équivalent à l'utilisation du Number constructeur en fonction:

+"2e1";   // 20
+"0xF";   // 15
+"010";   // 10
356
répondu CMS 2018-01-29 22:50:47
typeof parseInt("123") => number
typeof Number("123") => number
typeof new Number("123") => object (Number primitive wrapper object)

les deux premiers vous donneront de meilleures performances car il retourne une primitive au lieu d'un objet.

17
répondu letronje 2015-07-12 23:03:34

si vous êtes à la recherche de la performance, alors probablement les meilleurs résultats que vous obtiendrez avec le décalage de droite bitwise "10">>0 . Aussi multiplier ( "10" * 1 ) ou non ( ~~"10" ). Tous sont beaucoup plus rapides de Number et parseInt . Ils ont même "feature" retournant 0 pour l'argument pas de nombre. Voici tests de Performance .

14
répondu Saulius 2014-04-03 12:25:17

j'ai trouvé deux liens de performance comparer entre plusieurs façons de convertir string en int .

parseInt(str,10)    
parseFloat(str)
str << 0
+str
str*1 
str-0
Number(str)

http://jsben.ch/#/zGJHM

http://phrogz.net/js/string_to_number.html

6
répondu zangw 2016-10-17 13:35:39

j'utilise toujours parseInt, mais méfiez-vous des zéros de tête qui le forceront dans le mode octal .

4
répondu Diodeus - James MacFarlane 2010-11-03 18:52:01

une différence mineure est ce qu'ils convertissent de undefined ou null ,

Number() Or Number(null) // returns 0

alors que

parseInt() Or parseInt(null) // returns NaN
2
répondu Naeem Shaikh 2018-03-15 06:25:38

parseInt convertit un nombre entier, c'est des bandes de décimales. Le nombre ne fait pas la conversion en nombre entier.

1
répondu Johan Rylander 2017-02-21 12:51:57

parseInt() ->Analyse d'un nombre spécifié redix. Number() - > convertit la valeur spécifiée en son équivalent numérique ou NaN si elle ne le fait pas.

par conséquent, pour convertir une valeur non numérique en nombre, nous devrions toujours utiliser la fonction nombre ().

par exemple.

Number("")//0
parseInt("")//NaN

Number("123")//123
parseInt("123")//123

Number("123ac") //NaN,as it is a non numeric string
parsInt("123ac") //123,it parse decimal number outof string

Number(true)//1
parseInt(true) //NaN

il y a plusieurs cas de coin aux fonctions parseInt() comme il fait la conversion de redix, donc nous devrions éviter d'utiliser la fonction parseInt () pour encore de la contrainte fins. Maintenant, pour vérifier le temps la valeur fournie est numérique ou non,nous devrions utiliser "fonction" natif 151940920 151960920"

1
répondu Atishay Baid 2018-05-06 03:24:05