web-dev-qa-db-fra.com

JavaScript ajoutant une chaîne à un nombre

Je lisais le réintroduction de JavaScript sur MDN et dans la section Numéros il est dit que vous pouvez convertir une chaîne en un nombre simplement en ajoutant un opérateur plus devant lui.

Par exemple:

+ "42" qui donnerait le nombre de sortie de 42.

Mais plus loin dans la section sur les opérateurs , il est dit qu'en ajoutant une chaîne "quelque chose" à n'importe quel nombre, vous pouvez convertir ce nombre en chaîne. Ils fournissent également l'exemple suivant qui m'a dérouté:

"3" + 4 + 5 donnerait vraisemblablement une chaîne de 345 dans la sortie, car les nombres 4 et 5 seraient également convertis en chaînes.

Cependant, 3 + 4 + "5" ne donnerait-il pas un nombre de 12 au lieu d'une chaîne de 75 comme indiqué dans leur exemple?

Dans ce deuxième exemple de la section sur les opérateurs, l'opérateur + qui se tient devant une chaîne "5" ne convertira-t-il pas cette chaîne en nombre 5, puis ajoutera le tout à 12?

28
SineLaboreNihil

Ce dont vous parlez est un atout unaire. Il est différent du plus qui est utilisé avec la concaténation ou l'addition de chaînes.

Si vous souhaitez utiliser un plus unaire pour convertir et l'ajouter à la valeur précédente, vous devez doubler dessus.

> 3 + 4 + "5"
"75"
> 3 + 4 + +"5"
12

Modifier:

Vous devez vous renseigner sur l'ordre des opérations:

+ et - ont la même priorité et sont associés à gauche:

 > 4 - 3 + 5
 (4 - 3) + 5
 1 + 5
 6

+ associant à nouveau à gauche:

> 3 + 4 + "5"
(3 + 4) + "5"
7 + "5"
75

les opérateurs unaires ont normalement une priorité plus forte que les opérateurs binaires:

> 3 + 4 + +"5"
(3 + 4) + (+"5")
7 + (+"5")
7 + 5
12
35
epascarello

La réponse se trouve dans Ecma262.pdf section 11.6.1:

Si Type (lprim) est String ou Type (rprim) est String, alors a. Renvoie la chaîne résultant de la concaténation de ToString (lprim) suivi de ToString (rprim).

Ainsi, toutes les opérations seront résolues en fonction de la priorité, de sorte que dès que la chaîne sera trouvée, un nombre sera converti en chaîne.

4 + 3 + "5"
"75"
4 + 3 + "5" + 3
"753"

Pour lire l'intégralité de la norme, allez ici .

4
Agus

Vous pouvez également utiliser parseInt () ou parseFloat (), comme ceci:

> 1 + 2 + "3"
"33"
> 1 + 2 + parseInt(3)
6

Je pense que c'est beaucoup plus propre que d'utiliser + "3", mais c'est juste mon opinion.

4
Anickyan

Lorsque vous regardez l'étape 7 et la "note 2" dans l'opérateur d'addition (+) (§11.6.1) dans les spécifications ES5,

ça dit

Si Type (lprim) est String` ou Type (rprim) est String, puis renvoyez la chaîne résultant de la concaténation de ToString (lprim) suivie de ToString (rprim)


NOTE 2 L'étape 7 diffère de l'étape 3 de l'algorithme de comparaison pour les opérateurs relationnels (11.8.5), en utilisant l'opération logique ou au lieu de l'opération logique et.

Signification si 7 (3+4) ou "5" (|| Pas &&) est typeof "string"toString() est appliqué aux deux opérandes.

Donc, l'addition est en fait appliquée à

"7" Et "5" -> "7" + "5" //"75"

2
Moritz Roessler

Dans l'exemple de 3 + 4 + "5" - l'analyseur Javascript fera (3 + 4) + "5", comme le 3 + 4 est le premier - donc il ajoutera 3 + 4 parce que ce sont des nombres, puis concatène le chaîne "5".

1
Modul8

Lorsque vous ajoutez un nombre et une chaîne en Javascript, le résultat est toujours une chaîne.

Vérifiez l'expérience ici - http://jsfiddle.net/xuVur/1/

var a = "3" + 4 + 5;
var b = 3 + 4 + "5";

$("#result1").html(a); // prints 345
$("#result2").html(b); //prints 75
1
UnTechie

Un opérateur smple + en javascript est utilisé pour la concaténation et non pour l'ajouter.

Un crochet et un opérateur + avant la variable entière de format de chaîne feront le travail à chaque fois.

Cela fonctionne toujours très bien.

1 + (+"2") = 3

Parce que placer + avant la chaîne convertit la variable chaîne en nombre.

violon ici: http://jsfiddle.net/xuVur/2/

1
Sanjeev Singh