web-dev-qa-db-ja.com

Javascript(+)記号は、変数の合計を与える代わりに連結します

なぜこれを使用する場合:(i = 1と仮定)

divID = "question-" + i+1;

question-11ではなくquestion-2

73
ilyo

代わりにこれを使用してください:

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

これはかなり一般的な問題であり、JavaScriptで発生するだけではありません。 +両方連結と加算を表すことができるという考え方です。

+演算子は左から右に処理されるため、コードの決定は次のようになります。

  • "question-" + i"question-"は文字列なので、連結を行い、結果として"question-1"になります
  • "question-1" + 1"queston-1"は文字列なので、連結を行い、結果として"question-11"になります。

"question-" + (i+1)とは異なります:

  • (i+1)は括弧内にあるため、最初の+を適用する前にその値を計算する必要があります:
    • iは数値、1は数値なので、追加を行い、結果として2になります
  • "question-" + 2"question-"は文字列なので、連結を行い、結果として"question-2"になります。
71
Joachim Sauer

これも使用できます

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

iが整数に変換されるようにします。

34
Serafeim

使用のみ:

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

「n」がhtml入力フィールドから取得されるか、文字列として宣言される場合、明示的な変換を使用する必要があります。

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

「n」が整数の場合、変換の必要はありません。

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

文字列に数字を連結しているため、全体が文字列として扱われます。数字を一緒に追加したい場合は、次のように、個別に実行して変数に割り当て、その変数を使用する必要があります。

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

または、次のように番号の追加を指定する必要があります。

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

編集

私はこれをずっと前に追加すべきでしたが、コメントに基づいて、これも同様に機能します:

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

ここで確認してください 、JSFiddleです

4
rsplak

Joachim Sauerの答え は、このようなシナリオで機能します。しかし、括弧を追加しても役に立たない場合があります。

たとえば、「入力要素の値と整数の合計」を引数として関数に渡します。

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

Number() を使用して動作させることができます

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

someFuntion(arg1 + arg2);

または

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

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

この+演算子を使用してconcatとして動作するため、11が表示されます。

0
Avanish Kumar

括弧を追加する

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

数字を囲む中括弧を使用すると、連結ではなく加算として扱われます。

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

これが得られる理由は、演算子の優先順位と、+が文字列の連結と数値の加算の両方に使用されるという事実です。

あなたの場合、「question-」とiの連結が最初に行われ、文字列「question = 1」が与えられます。次に、「1」との別の文字列連結により「question-11」が得られます。

単に通訳者にどのような順序で希望するかについてのヒントを与えるだけです。

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

別の代替手段を使用することもできます:

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

マイナスの減算は加算と同じであり、マイナスを連結に使用することはできません

0
Zeke Young