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?
Réponses
Trop de publicités?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
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 .