0

if 条件で一時変数のシーケンスを変更すると、変数の結果が返されます。

var temp=1;

var res=(temp++==temp)?"Equal":"Not Equal";
alert(res); //Not Equal

var res=(temp==temp++)?"Equal":"Not Equal";
alert(res); //Equal

JSフィドル: - http://jsfiddle.net/adiioo7/e9qLK/

4

3 に答える 3

1

とても簡単です。

最初tempはインクリメントされますが、ポストインクリメント演算子であるため、式の左辺 (LHS) は依然として元の値に評価されます。次に、右側 (RHS) が評価されtempますが、既にインクリメントされているため、新しい値が含まれています。次に、LHS と RHS が比較されます - それらはもはや等しくありません。

2 番目の例では、RHS が評価された後にインクリメントが発生するため、LHS と RHS は等しいままです。

私はこの振る舞いに頼りません。他の言語 ISTR では、インクリメント演算子が使用されているときに式で同じ変数を複数回参照することは、明示的に定義されていない動作です。

于 2013-02-21T12:40:34.337 に答える
1

それは操作の順序と関係があります。比較で何が起こるかを次に示します。

  • 左側の式を評価します。
  • 右側の式を評価します。
  • 2 つが等しいかどうかを確認します。

ポストインクリメント演算子 ( ++) は値を返し、変数を 1 ずつインクリメントします。したがって、最初のケースでは、最初の temp の値は 1 ですが、右側が評価される前に 2 にインクリメントされます。2 番目のケースでは、両側の値が既に取得された後にインクリメントが発生します。

この動作はすべての言語に当てはまるわけではないことに注意してください。実装は異なります。

于 2013-02-21T12:41:07.350 に答える
1

これは++、変数が値を返した後、それをインクリメントするためです。

したがって、最初の例でtemp++は、左側は 1 ですがtemp、右側は 2 です。

2 番目の例では、temptemp++は両方とも 1 です。

于 2013-02-21T12:39:33.977 に答える