467 votes

String en int utiliser parseInt ou nombre ?

Comme le titre le dit déjà, que devrais-je préférer lors de la conversion d'une chaîne en int? Y a-t-il un gain de performance lors de l'utilisation de l'un sur l'autre?

586voto

CMS Points 315406

Eh bien, ils sont sémantiquement différents, l' Number constructeur appelle la fonction effectue la conversion de type et parseInt effectue l'analyse, par exemple:

// 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 sur la chaîne, il analyse le nombre en octal de base, ce qui a changé sur ECMAScript 5, la nouvelle version de la norme, mais il faudra un certain temps pour revenir dans le navigateur implémentations (c'est une incompatibilité avec ECMAScript 3), aussi parseInt ignore les caractères de fin qui ne correspondent pas à tous les chiffres de la base utilisé.

L' 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, largement utilisé de construire pour effectuer Numérique type de conversion, est le Unaire + de l'Opérateur (p. 72), il est équivalent à l'utilisation de l' Number constructeur en fonction:

+"2e1";   // 20
+"0xF";   // 15
+"010";   // 10

32voto

letronje Points 3228
 typeof parseInt("123") => number
typeof Number("123") => number
typeof new Number("123") => object
 

Les deux premières vous donneront de meilleures performances car elles renvoient une primitive au lieu d’un objet.

15voto

Saulius Points 172

Si vous recherchez des performances, vous obtiendrez probablement les meilleurs résultats avec le décalage vers la droite au niveau du bit "10">>0 . Aussi multiplier ( "10" * 1 ) ou pas ( ~~"10" ). Tous sont beaucoup plus rapides de Number et parseInt . Ils ont même "fonctionnalité" retournant 0 pour l'argument pas de nombre. Voici les tests de performance .

6voto

Diodeus Points 67946

J'utilise toujours parseInt, mais méfiez-vous des zéros qui le forceront en mode octal .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X