JavaScriptでの++ someVariableとsomeVariable ++の比較


135

JavaScriptでは、変数名の++前(pre-increment)または変数名(post-increment)の後に演算子を使用できます。変数をインクリメントするこれらの方法の違いは何ですか?



私は昨日、C / C ++の悪い仮定に関する質問に対するこの応答を読んで、これについて考えていました。すべての場合において、JavaScriptがこのように動作することを保証できますか?それとも、より複雑なステートメント内でインクリメントステートメントを使用するのは悪い習慣だと思いますか?
palswim

以前のコメントは、実際には2010年に投稿した回答(むしろ回答ではない)のコピーです。私は答えを削除しましたが、ジョンスキート 「ECMA-262を見ると、かなり適切に指定されているようです」と答えいました
palswim

回答:


242

他の言語と同じ:

  • ++x (プリインクリメント)は、「変数をインクリメントします。式の値は最終値です」
  • x++ (ポストインクリメント)は、「元の値を記憶してから変数をインクリメントします。式の値は元の値です」

スタンドアロンステートメントとして使用すると、同じ意味になります。

x++;
++x;

違いは、式の値を他の場所で使用する場合です。例えば:

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]

13
Curses、私は実用的なjsfiddle回答をロードするために私が止まらなかった場合、ほとんどあなたを回答に打ち負かしました。;-)
Chris

2
+ 1代わりに使用した場合、これはどのように見えます++か?数値を追加する前または後にインクリメントする方法はありますか?
Keavon 14

この操作を行うとなぜconst r1 =(x ++)+(x ++); あなたの例によれば、期待した結果は得られません。
Jean Jimenez

1
@JeanJimenez:まあそれは私が期待する結果生み出します。たとえば、xが10から始まる場合、の値r1は21で、10 + 11です。最初の値はx++式10であり、x第二の値が11にインクリメントされるx++式11とx12にインクリメントされる
ジョンスキート

@JonSkeetの超高速応答に感謝します。私はJavaScriptを学ぶのは初めてです。私の混乱は、1つが増加し、もう1つが増加しない理由に関するものです。
Jean Jimenez

43
  • ++x 値をインクリメントし、評価して保存します。
  • x++ 値を評価し、それを増分して格納します。
var n = 0, m = 0;

alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */

++x変数を読み取って変更し、評価して保存するため、可能な場合は使用することでパフォーマンスにわずかな利点があることに注意してください。x++値を読み取り、評価し、変更してから保存する演算子と比較してください。


7

私が理解しているように、スタンドアロンで使用すると、同じことを実行します。それらの結果を式として出力しようとすると、異なる場合があります。違いを確認するには、alert(++ i)と比較してalert(i ++)を試してください。i ++は加算前にiと評価され、++ iは評価前に加算されます。

例については、http://jsfiddle.net/xaDC4/を参照してください。



0
var x = 0, y = 0;

//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x);    //1

//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y);   //1

0

ポストインクリメントとプレインクリメントの理解について説明しました。ここに入れます。

に割り当てましょ0x

let x = 0;

ポストインクリメントから始めましょう

console.log(x++); // Outputs 0

どうして?

x++式を分解しましょう

x = x;
x = x + 1;

最初のステートメントは次の値を返します xあります0

そして後で使うとき x変数をどこかで、2番目のステートメントが実行されます

2番目のステートメントは、このx + 1式の値を返します。(0 + 1) = 1

xこの状態での価値を覚えておいてください1

ここで、プリインクリメントから始めましょう

console.log(++x); // Outputs 2

どうして?

++x式を分解しましょう

x = x + 1;
x = x;

最初のステートメントは、このx + 1式の値を返します。(1 + 1) = 2

2番目のステートメントは、値を返すxとなる2ので、x = 2したがってリターンを2

これがポストインクリメントとプレインクリメントとは何かを理解するのに役立つことを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.