9
votes

Quelle est la différence entre "nouveau numéro (...)" et "numéro (...)" en JavaScript?

dans JavaScript, l'un des façons fiables de convertir une chaîne en nombre est le numéro constructeur: xxx

inspiré par cette question , j'ai commencé à me demander - quelle est la différence entre ce qui précède et: xxx

Number semble certainement mieux, mais cela semble être une utilisation légèrement inappropriée d'un constructeur. Y a-t-il des effets secondaires ou une différence pour l'utiliser sans le nouveau neuf ? S'il n'y a pas de différence, pourquoi pas, et quel est le but de nouveau


0 commentaires

4 Réponses :


0
votes

SPIDERMONKEY-1.7.0:

js> typeof new Number('09');
object
js> typeof Number('09');
number


0 commentaires

13
votes

Dans le premier cas, vous utilisez le constructeur de numéros appelé comme une fonction , comme décrit dans la spécification, cela effectuera simplement une conversion de type, vous renvoyant un numéro numéro code> primitif.

Dans le second cas, vous utilisez le numéro code> constructeur pour créer un numéro Objet EM>: P>

var x = Number('09');
typeof x; // 'number'

var x = new Number('09');
typeof x; // 'object'

Number('1') === new Number('1'); // false


3 commentaires

Pour être juste, nouveau numéro ('1') === nouveau numéro ('1') est également faux , mais je suis d'accord avec vous :)


Droite, car cela comparera deux références d'objet différentes.


@RICHARD SZALAY - mais, numéro ('1') === Numéro ('1') est true , qui illustre le point de @ CMS.



4
votes

numéro renvoie une valeur de numéro primitive. Oui, c'est un peu étrange que vous puissiez utiliser une fonction de constructeur comme une fonction simple, mais c'est simplement la définition de JavaScript. La plupart des types de langues intégrées ont des fonctionnalités supplémentaires étranges et incohérentes telles que celles-ci.

nouveau numéro construit un objet coffret explicite objet. La différence: xxx

Contrairement aux classes primitives boxées de Java, dans JavaScript, Number d'objets de absolument aucune utilisation .

Je ne me soucierais pas d'utiliser numéro . Si vous souhaitez être explicite, utilisez parsefloat ('09 ') ; Si vous voulez être TERSE, utilisez + '09' ; Si vous souhaitez autoriser uniquement des entiers, utilisez parseint ('09 ', 10) .


1 commentaires

+1, j'aimerais pouvoir accepter deux réponses comme correctes, car les deux sont correctement corrects et contiennent des informations utiles uniques. Je ne savais pas d'utiliser + sans numéro précédant.



0
votes

numéro (sans nouveau) ne semble pas résulter exactement dans une primitive. Dans l'exemple suivant, le Nymmet méthod () est appelé (si dans le prototype de numéro).

3.anyMethod()


0 commentaires