it-swarm.com.de

Javascript (+) - Zeichen verkettet, anstatt die Summe der Variablen anzugeben

Warum, wenn ich das benutze: (vorausgesetzt, i = 1)

divID = "question-" + i+1;

Ich bekomme Frage-11 und nicht Frage-2 ?

72
ilyo

Verwenden Sie stattdessen diese:

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

Es ist ein ziemlich häufiges Problem und passiert nicht nur in JavaScript. Die Idee ist, dass + beides Verkettung und Addition darstellen kann.

Da der Operator + von links nach rechts behandelt wird, sehen die Entscheidungen in Ihrem Code folgendermaßen aus:

  • "question-" + i: Da "question-" eine Zeichenfolge ist, führen wir die Verkettung durch, was zu "question-1" führt.
  • "question-1" + 1: Da "queston-1" eine Zeichenfolge ist, führen wir die Verkettung durch, was "question-11" ergibt.

Mit "question-" + (i+1) ist es anders:

  • da der (i+1) in Klammern steht, muss sein Wert berechnet werden, bevor der erste + angewendet werden kann:
    • i ist numerisch, 1 ist numerisch, wir müssen also hinzufügen, was 2 ergibt.
  • "question-" + 2: Da "question-" eine Zeichenfolge ist, führen wir die Verkettung durch, was "question-2" ergibt.
70
Joachim Sauer

Sie können dies auch verwenden 

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

um sicher zu sein, dass i in eine ganze Zahl konvertiert wird.

34
Serafeim

Nur benutzen:

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

Wenn "n" aus dem HTML-Eingabefeld stammt oder als Zeichenfolge deklariert ist, müssen Sie die explizite Konvertierung verwenden.

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

Wenn "n" eine Ganzzahl ist, ist keine Konvertierung erforderlich.

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

Da Sie Zahlen mit einer Zeichenfolge verketten, wird das Ganze als Zeichenfolge behandelt. Wenn Sie Zahlen zusammen hinzufügen möchten, müssen Sie dies entweder separat tun und einer Var zuweisen und diese Var wie folgt verwenden:

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

Oder Sie müssen den Nummernzusatz folgendermaßen angeben:

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

EDIT

Ich hätte das schon vor langer Zeit hinzufügen sollen, aber aufgrund der Kommentare funktioniert das auch:

divID = "question-" + (i+1);
8
Tim Hobbs
divID = "question-" + parseInt(i+1,10);

überprüfe es hier , es ist ein JSFiddle

4
rsplak

Joachim Sauers Antwort wird in solchen Szenarien funktionieren. Es gibt jedoch Fälle, in denen das Hinzufügen von Klammern nicht hilfreich ist.

Zum Beispiel: Sie übergeben als Argument eine Wertsumme eines Eingabeelements und eine Ganzzahl an eine Funktion.

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

Sie können es funktionieren lassen, indem Sie Number() verwenden.

arg1 = Number($("#elemId").val());
arg2 = 1;

someFuntion(arg1 + arg2);

oder

arg1 = $("#elemId").val();
arg2 = 1;

someFuntion(Number(arg1) + arg2);
1
musafar006
var divID = "question-" + (parseInt(i)+1);

Verwenden Sie diesen +-Operator als concat, deshalb wird 11 angezeigt.

0
Avanish Kumar

Klammern hinzufügen

divID = "question-" + (i+1);
0
Billy Moon

die Verwendung von geschweiften Klammern um die Zahlen herum wird als Zusatz anstelle von concat behandelt.

divID = "question-" + (i+1)
0
niksvp

Der Grund dafür ist die Reihenfolge der Vorrangigkeit der Operatoren und die Tatsache, dass + verwendet wird, um sowohl Zeichenfolgen zu verketten als auch eine numerische Addition durchzuführen.

In Ihrem Fall geschieht die Verkettung von "question-" und i, indem Sie zunächst die Zeichenfolge "question = 1" eingeben. Dann eine weitere String-Verkettung mit "1", die "Frage-11" ergibt.

Sie müssen dem Interpreter lediglich einen Hinweis darauf geben, welche Reihenfolge Sie wünschen.

divID = "question-" + (i+1);
0
Jamiec

Eine andere Alternative könnte sein:

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

Das Abziehen eines Negativs ist das Gleiche wie das Hinzufügen, und ein Minus kann nicht für die Verkettung verwendet werden

0
Zeke Young