80 votes

Le signe Javascript (+) concatène au lieu de donner la somme des variables

Pourquoi quand j'utilise ceci: (en supposant que je = 1)

 divID = "question-" + i+1;
 

Je reçois la question 11 et non la question 2 ?

85voto

Joachim Sauer Points 133411

Utilisez ceci à la place:

var divID = "question-" + (i+1)

C'est un problème assez courant et ne se produit pas seulement en JavaScript. L'idée est qu' + peut représenter à la fois la concaténation et plus.

Depuis l'opérateur + seront traitées de gauche à droite les décisions dans votre code ressemble à ceci:

  • "question-" + i: depuis "question-" est une chaîne de caractères, nous allons faire la concaténation, résultant en "question-1"
  • "question-1" + 1: depuis "queston-1" est une chaîne de caractères, nous allons faire la concaténation, résultant en "question-11".

Avec "queston-" + (i+1) , c'est différent:

  • depuis l' (i+1) est dans la parenthèse, sa valeur doit être calculée avant la première + peut être appliquée:
    • i est un chiffre, 1 est numérique, donc nous allons faire plus, résultant en 2
  • "question-" + 2: depuis "question-" est une chaîne de caractères, nous allons faire la concaténation, résultant en "question-2".

35voto

Serafeim Points 3812

Vous pouvez aussi utiliser ceci

 divID = "question-" + (i*1+1); 
 

pour être sûr que i est converti en entier.

18voto

edercortes Points 61

Utiliser seulement:

 divID = "question-" + parseInt(i) + 1;
 

Lorsque "n" provient du champ de saisie html ou est déclaré en tant que chaîne, vous devez utiliser une conversion explicite.

 var n = "1"; //type is string
var frstCol = 5;
lstCol = frstCol + parseInt(n);
 

Si "n" est un entier, vous n'avez pas besoin de conversion.

 n = 1; //type is int
var frstCol = 5, lstCol = frstCol + n;
 

9voto

Tim Hobbs Points 1467

Puisque vous concaténez des nombres sur une chaîne, le tout est traité comme une chaîne. Lorsque vous souhaitez additionner des nombres, vous devez le faire séparément, puis l’affecter à une variable et l’utiliser, comme ceci:

 i = i + 1;
divID = "question-" + i;
 

Ou vous devez spécifier l'ajout du numéro comme ceci:

 divID = "question-" + Number(i+1);
 

4voto

rsplak Points 6238
 divID = "question-" + parseInt(i+1,10);
 

vérifiez ici , c'est un JSFiddle

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