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?
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
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.
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 .
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)
j'utilise toujours parseInt, mais méfiez-vous des zéros de tête qui le forceront dans le mode octal .
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
parseInt convertit un nombre entier, c'est des bandes de décimales. Le nombre ne fait pas la conversion en nombre entier.
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"