Pourquoi quand j'utilise ceci: (en supposant que i = 1
)
divID = "question-" + i+1;
Je reçois question-11 et pas question-2 ?
Utilisez ceci à la place:
var divID = "question-" + (i+1)
C'est un problème assez courant qui ne se produit pas uniquement en JavaScript. L'idée est que +
peut représenter les deux concaténation et addition.
Puisque l'opérateur + sera traité de gauche à droite, les décisions dans votre code se présentent comme suit:
"question-" + i
: puisque "question-"
est une chaîne, nous allons faire une concaténation, ce qui donne "question-1"
"question-1" + 1
: puisque "queston-1"
est une chaîne, nous allons faire la concaténation, ce qui donne "question-11"
.Avec "question-" + (i+1)
c'est différent:
(i+1)
est entre parenthèses, sa valeur doit être calculée avant que le premier +
puisse être appliqué: i
est numérique, 1
est numérique, nous allons donc en ajouter, ce qui donne 2
"question-" + 2
: puisque "question-"
est une chaîne, nous allons faire la concaténation, ce qui donne "question-2"
.Vous pouvez aussi utiliser ceci
divID = "question-" + (i*1+1);
pour être sûr que i
est converti en entier.
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;
Puisque vous concaténez des nombres sur une chaîne, le tout est traité comme une chaîne. Lorsque vous voulez additionner des nombres, vous devez soit le faire séparément, soit l'assigner à 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);
MODIFIER
J'aurais dû ajouter cela il y a longtemps, mais selon les commentaires, cela fonctionne aussi:
divID = "question-" + (i+1);
divID = "question-" + parseInt(i+1,10);
vérifier ici , c'est un JSFiddle
La réponse de Joachim Sauer travaillera dans des scénarios comme celui-ci. Mais il y a des cas où l'ajout de crochets n'aidera pas.
Par exemple, vous transmettez 'la somme de la valeur d'un élément d'entrée et d'un entier' en tant qu'argument à une fonction.
arg1 = $("#elemId").val(); // value is treated as string
arg2 = 1;
someFuntion(arg1 + arg2); // and so the values are merged here
someFuntion((arg1 + arg2)); // and here
Vous pouvez le faire fonctionner en utilisant Number()
arg1 = Number($("#elemId").val());
arg2 = 1;
someFuntion(arg1 + arg2);
ou
arg1 = $("#elemId").val();
arg2 = 1;
someFuntion(Number(arg1) + arg2);
var divID = "question-" + (parseInt(i)+1);
Utiliser cet opérateur +
se comporte comme concat
c'est pourquoi il affiche 11.
Ajouter des crochets
divID = "question-" + (i+1);
utiliser des accolades entourant les nombres sera considéré comme une addition au lieu de concat.
divID = "question-" + (i+1)
Vous obtenez cela en raison de l'ordre de priorité des opérateurs et du fait que +
est utilisé à la fois pour concaténer des chaînes et pour effectuer une addition numérique.
Dans votre cas, la concaténation de "question-" et de i
se produit en premier en donnant la chaîne "question = 1". Puis une autre concaténation de chaîne avec "1" donnant "question-11".
Il vous suffit simplement de donner à l'interprète un indice quant à l'ordre de priorité que vous souhaitez.
divID = "question-" + (i+1);
Une autre alternative pourrait utiliser:
divID = "question-" + i- -1;
Soustraire un négatif équivaut à ajouter, et un signe moins ne peut pas être utilisé pour la concaténation.