web-dev-qa-db-ja.com

JavaScriptの++ someVariableとsomeVariable ++

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

116
Derek Adair

他の言語と同じ:

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

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

x++;
++x;

別の場所で式の値を使用すると違いが生じます。例えば:

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

x = 0;
y = array[++x]; // This will get array[1]
200
Jon Skeet
  • ++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++演算子とは異なります。

34
Justin Force

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

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

6
Chris

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

1
palswim
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
cacoder
var a = 1;
var b = ++a;
alert('a:' + a + ';b:' + b); //a:2;b:2

var c = 1;
var d = c++;
alert('c:' + c + ';d:' + d); //c:2;d:1

jsfiddle

0
The Code Guy