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/
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/
とても簡単です。
最初temp
はインクリメントされますが、ポストインクリメント演算子であるため、式の左辺 (LHS) は依然として元の値に評価されます。次に、右側 (RHS) が評価されtemp
ますが、既にインクリメントされているため、新しい値が含まれています。次に、LHS と RHS が比較されます - それらはもはや等しくありません。
2 番目の例では、RHS が評価された後にインクリメントが発生するため、LHS と RHS は等しいままです。
私はこの振る舞いに頼りません。他の言語 ISTR では、インクリメント演算子が使用されているときに式で同じ変数を複数回参照することは、明示的に定義されていない動作です。
それは操作の順序と関係があります。比較で何が起こるかを次に示します。
ポストインクリメント演算子 ( ++
) は値を返し、変数を 1 ずつインクリメントします。したがって、最初のケースでは、最初の temp の値は 1 ですが、右側が評価される前に 2 にインクリメントされます。2 番目のケースでは、両側の値が既に取得された後にインクリメントが発生します。
この動作はすべての言語に当てはまるわけではないことに注意してください。実装は異なります。
これは++
、変数が値を返した後、それをインクリメントするためです。
したがって、最初の例でtemp++
は、左側は 1 ですがtemp
、右側は 2 です。
2 番目の例では、temp
とtemp++
は両方とも 1 です。