2016-04-28 1 views
7

Dites que j'ai une chaîne, dont la valeur est déjà un nombre, par ex. var str = "1234" Maintenant, je veux le convertir en nombre.Pourquoi + str est-il meilleur que str * 1 dans JS pour convertir une chaîne en nombre?

Je l'ai vu deux tours sur Internet à ce jour,

  1. Utilisez le + unaire: var num = +str
  2. L'opérateur se multiplient *: var num = str*1

Je veux savoir que l'on est mieux en général.

Comme je l'ai vu à partir du commentaire de la réponse acceptée ici: Converting Json Results to a Date, il semble que *1 est préférable d'être évité. Est-ce vrai et quelle est la raison?

+5

Pour entier, parseInt() serait mieux –

+2

Le plus unaire est par définition destiné à convertir une valeur à un certain nombre, il est donc plus sémantiquement correct que la multiplication par 1 qui introduit un autre opérande. @EricSo - parseInt() n'est meilleur que si vous voulez spécifiquement ignorer des données non numériques ou des valeurs de décimales dans la chaîne - sinon c'est * pire * que le unaire plus * car * il ignore ces choses. – nnnnnn

Répondre

10

Moins d'opérations, fondamentalement. L'unaire plus appelle la méthode interne toNumber, tandis que l'opérateur de multiplication appelle également toNumber, puis exécute une opération mathématique sur celui-ci.

Pourquoi faire les étapes supplémentaires?

http://www.ecma-international.org/ecma-262/6.0/#sec-unary-plus-operator

http://www.ecma-international.org/ecma-262/6.0/#sec-applying-the-mul-operator

+0

Merci. Propre et claire réponse, et laissez-moi savoir que + n'est pas hacky du tout .. il est en effet l'intention officielle de faire le travail – shole

+1

Je ne dirais pas que c'est l'intention officielle car il existe des langues fortement typées qui mettent en œuvre le unaire '+'. Cependant, lorsque vous utilisez un sous-ensemble JavaScript spécifique appelé ASM, le '+' est officiellement utilisé pour définir un nombre à virgule flottante et ' | 0' est utilisé pour taper les entiers 32 bits. –