JavaScriptでは、++
演算子(pre-increment)または変数名の後(post-increment)。変数をインクリメントするこれらの方法の違いは、もしあれば、何ですか?
他の言語と同じ:
++x
(事前増分)は、「変数を増分します。式の値は最終値です」x++
(ポストインクリメント)は、「元の値を記憶してから変数をインクリメントします。式の値は元の値です」スタンドアロンステートメントとして使用する場合、同じ意味になります。
x++;
++x;
別の場所で式の値を使用すると違いが生じます。例えば:
x = 0;
y = array[x++]; // This will get array[0]
x = 0;
y = array[++x]; // This will get array[1]
++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++
演算子とは異なります。
あなたがそれらをスタンドアロンで使用する場合、それらを理解するように、それらは同じことをします。それらの結果を式として出力しようとすると、異なる場合があります。 alert(++ i)と比較してalert(i ++)を試して、違いを確認してください。 i ++は加算の前にiに評価され、++ iは評価の前に加算を行います。
例については、 http://jsfiddle.net/xaDC4/ を参照してください。
私は昨日 この応答C/C++の悪い仮定 についての質問を読んでこれについて考えていました。すべての場合において、Javascriptがこのように動作することを保証できますか?または、より複雑なステートメント内でインクリメントステートメントを使用するのは悪い習慣だと思いますか?
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
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