0

重複の可能性:
++someVariable Vs. Javascript の someVariable++

インクリメント演算子を理解するのに苦労しています。この演算子は、オペランドをインクリメント (1 を加算) し、値を返します。オペランド (x++) の後に演算子を付けて接尾辞を使用したため、インクリメントする前に値を返します。

したがって、x が 3 の場合、ステートメント y = x++ は y を 3 に設定し、x を 4 にインクリメントします。

var x = 3; 
var y = x++; 

console.log(x); // 4
console.log(y); // 3

yが 4 の値を保持せず、代わりに 3 に設定される理由とx、値 3 が割り当てられたときに 4 の値を保持する理由がわかりません。

4

9 に答える 9

4

ポストインクリメント演算子は、その値が取得された後にインクリメントします。それがプレインクリメント演算子との違いです。

于 2013-01-14T14:30:23.917 に答える
2

アレックスのコメントに従うことで、質問が改善されました。

変数xsaがあるとしますvar x=3

ケース1 あなたが書くとき:

var y = x++;

次に、次の手順が実行されます。

  1. 変数xが評価されます ( xis 3);
  2. 変数xがインクリメントされます ( xis 4);
  3. 評価の結果 (ステップ (1)で行われた) が割り当てられますy(したがって、 result になりy=3ます);

CASE 2 次のように書く場合: var y = ++x;

次に、次の手順が実行されます。

  1. 変数xがインクリメントされます ( xis 4);
  2. 変数xが評価されます ( xis 4);
  3. 評価の結果 (ステップ (2)で行われた) が割り当てられますy(したがって、 result になりy=4ます);

この場合、Javascript の演算子の優先順位に従うことが重要です (たとえば、詳細はこちらを参照してください)。

CASE 3完全を期すために、 Alex が観察したように、 CASE1で提供された手順が同じ変数で繰り返される場合、変数がインクリメントされてから初期値に復元されることを認識することも重要です。 :

x = x++;

次に、次の手順が実行されます。

  1. 変数xが評価されます ( xis 3);
  2. 変数xがインクリメントされます ( xis 4);
  3. 評価の結果 (ステップ (1)で行われた) が割り当てられますx(したがって、 result になりx=3ます);
于 2013-01-14T14:31:52.890 に答える
2
var y = x++;

は、次の 2 つのステートメントの省略形です (順番に)。

var y = x;
x = x + 1;

y を 4 にしたい場合は、次のようにします。

var y = ++x;

これは次の省略形です。

x = x + 1;
var y = x;
于 2013-01-14T14:33:17.657 に答える
1

MDN ドキュメントから- 算術演算子

++ (インクリメント)

インクリメント演算子は次のように使用されます。

var++ または ++var

この演算子は、そのオペランドをインクリメント (1 を加算) し、値を返します。オペランドの後に演算子 (x++ など) を付けて接尾辞を使用すると、インクリメントする前の値が返されます。オペランドの前に演算子のプレフィックスを使用した場合 (たとえば、++x)、インクリメントした後の値を返します。

たとえば、x が 3 の場合、ステートメント y = x++ は y を 3 に設定し、x を 4 にインクリメントします。x が 3 の場合、ステートメント y = ++x は x を 4 にインクリメントし、y を 4 に設定します。

于 2013-01-14T14:31:48.257 に答える
0
var y = x++; 

xが増分yされ、 の増分値が割り当てられることを意味しますx

var y = ++x;

xが増分yされ、事前に増分された値 が割り当てられることを意味しますx

于 2013-01-14T14:31:35.257 に答える
0

++after the variable はポスト インクリメント演算子であり、変数が読み取られた後にインクリメントが実行されることを意味します。

参照: http://en.wikipedia.org/wiki/Increment_and_decrement_operators

于 2013-01-14T14:30:24.017 に答える
0

x++x の値の一時的なコピーが作成され、一時的なコピーが返された後に、with のインクリメントが発生します。反対は ++x で、これはインクリメントであり、新しい値を返します。

var x = 3;
var y = ++x; // y === 4

ECMA 5.1からの引用:

PostfixExpression : LeftHandSideExpression LeftHandSideExpression [ここに LineTerminator なし] ++ LeftHandSideExpression [ここに LineTerminator なし] -- 70 © Ecma International 2011
11.3.1 後置インクリメント演算子 プロダクション PostfixExpression : LeftHandSideExpression [ここに LineTerminator なし] ++ は次のように評価されます。 1. lhs を LeftHandSideExpression を評価した結果とします。2. 次の条件がすべて true の場合、SyntaxError 例外をスローします。  Type(lhs) が Reference が true  IsStrictReference(lhs) が true  Type(GetBase(lhs)) が Environment Record  GetReferencedName(lhs) が「eval」のいずれか" または "arguments" 3. oldValue を ToNumber(GetValue(lhs)) とします。4. + 演算子と同じ規則を使用して、値 1 を oldValue に加算した結果を newValue とする (11.6.3 を参照)。5. PutValue(lhs, newValue) を呼び出します。6. oldValue を返します。

于 2013-01-14T14:30:43.727 に答える
0

x++* post *increment 演算子です。それは以下と同等です:

 var tmp = x;
 x = x + 1;
 return tmp;

これは、人々が次のようなコードを書きたがっていた古き良き C 時代の名残りです。

 while(*dest++ = *src++);

(翻訳: メモリ範囲を最初の 0 バイトまでコピーします)。最初にインクリメントしてから、インクリメントされた結果を返す* pre *increment 演算子もあります。++ x

于 2013-01-14T14:31:13.397 に答える
0

増やす方法は2つ

var y = x++; // first make the allocation then the increasing
// and
var y = ++x; // first make the increasing then the allocation
于 2013-01-14T14:31:13.690 に答える