208 votes

Quel est le meilleur, nombre (x) ou parseFloat (x)?

Ce qui est mieux?

Je demande ceci juste pour pouvoir raser quelques octets, car je peux utiliser + x au lieu de nombre (x). Parsefloat fait-il mieux?

MODIFIER:

Verdict - parseFloat. Même si +(x) économisaient quelques octets, parseFloat récupère autant que possible un combo chaîne / nombre.

422voto

Nathan Wall Points 3763

La différence entre parseFloat et le Nombre

parseFloat/parseInt est pour l'analyse d'une chaîne de caractères, alors que Number/+ est pour le fait de contraindre une valeur à un certain nombre. Ils se comportent différemment. Mais d'abord, regardons où ils se comportent de la même:

parseFloat('3'); // => 3
Number('3'); // => 3
parseFloat('1.501'); // => 1.501
Number('1.501'); // => 1.501
parseFloat('1e10'); // => 10000000000
Number('1e10'); // => 10000000000

Donc, tant que vous avez de la norme d'entrée numérique, il n'y a pas de différence. Toutefois, si votre entrée commence par un nombre, puis contient d'autres caractères, parseFloat tronque le numéro de la chaîne, tandis que Number donne NaN (pas un nombre):

parseFloat('1x'); // => 1
Number('1x'); // => NaN

En outre, Number comprend hexadécimal entrée alors que l' parseFloat n'est pas:

parseFloat('0x10'); // => 0
Number('0x10'); // => 16

Mais Number des actes bizarres avec des chaînes vides ou des chaînes de caractères ne contenant que des espaces blancs:

parseFloat(''); // => NaN
Number(''); // => 0
parseFloat(' \r\n\t'); // => NaN
Number(' \r\n\t'); // => 0

Sur l'ensemble, je trouve Number pour être plus raisonnable, j'ai donc presque toujours utiliser Number personnellement (et vous verrez que beaucoup de l'intérieur de fonctions JavaScript utiliser Number ). Si quelqu'un tape '1x' je préfère afficher une erreur plutôt que de les traiter comme si elles avaient tapé '1'. La seule fois où j'ai vraiment faire une exception, c'est quand je suis la conversion d'un style à un certain nombre, auquel cas parseFloat est utile parce que les styles viennent dans une forme comme '3px', auquel cas je souhaite supprimer l' 'px' de la partie et vient d'obtenir l' 3, donc je trouve parseFloat utile ici. Mais vraiment celui que vous choisissez est à vous et les formes d'entrée que vous souhaitez accepter.

Notez que l'utilisation de l'unaire + opérateur est exactement le même que l'utilisation de Number en fonction:

Number('0x10'); // => 16
+'0x10'; // => 16
Number('10x'); // => NaN
+'10x'; // => NaN
Number('40'); // => 40
+'40'; // => 40

Donc j'ai l'habitude de simplement utiliser + pour faire court. Aussi longtemps que vous savez ce qu'il fait, je le trouve facile à lire.

17voto

Jon Points 194296

La différence est ce qui se produit lorsque l'entrée n'est pas un "nombre correct". Number renvoie NaN alors que parseFloat analyse "autant qu'il peut". Si elle est appelée sur la chaîne vide Number renvoie 0 tandis que parseFloat renvoie NaN .

Par exemple:

 Number("") === 0         // also holds for false
parseFloat("") === NaN   // and null

Number("32f") === NaN
parseFloat("32f") === 32
 

15voto

micnic Points 3085

Dans ces exemples, vous pouvez voir la différence:

Number('') = 0;
Number(false) = 0;
Number('1a') = NaN;

parseFloat('') = NaN;
parseFloat(false) = NaN;
parseFloat('1a') = 1;

parseFloat est un peu plus lent, car il recherche d'abord l'apparition d'un nombre en une chaîne de caractères, alors que le Nombre constuctor crée une nouvelle instance du numéro à partir de chaînes de caractères qui contient des valeurs numériques avec des espaces blancs ou qui contient de fausses valeurs.

P. S. Si vous êtes intéressé par certains universelle de conversion de type de solutions, vous pouvez lire le post sur la conversion de type dans mon blog: http://justsimplejs.blogspot.com/2012/08/data-type-conversion.html

2voto

Christopher Points 847

Autant que je sache, et ce n'est entendu de la part des collègues, donc peut être tout à fait mal informés, que parseFloat est légèrement plus rapide.

Bien que sur la poursuite de la recherche, il semblerait que cette différence de performances est un navigateur charge.

http://jsperf.com/parseint-vs-parsefloat/6

Jetez un oeil à ces jsPerf résultats, et vous êtes à l'appel. (il comprend +x tests)

Comme indiqué dans @xdazz 's réponse, +"" et Number("") rendement 0 tout parseFloat("") retours NaN Encore une fois, je voudrais aller avec parseFloat, car une chaîne vide ne signifie PAS le nombre 0, seulement une chaîne de caractères avec le caractère "0" dans cela signifie 0;

2voto

xdazz Points 85907

Pour une chaîne vide, ils sont différents.

+"" et Number("") renvoie 0, alors que parseFloat("") renvoie NaN.

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