変数の値を1足すものをインクリメント演算子、1引くものをデクリメント演算子と呼びます。
インクリメント・デクリメント演算子にはそれぞれ2種類の演算子があります。変数aをインクリメント・デクリメントする場合は、
インクリメント ++a (前置インクリメント) a++(後置インクリメント)
デクリメント --a(前置デクリメント) a—(後置デクリメント)
となります。
なんで2種類も準備するかということになりますが、
・前置インクリメント・デクリメントは、
それが記述された瞬間に処理が行われ
・後置インクリメント・デクリメントは、それが記述された
行の処理が終わった瞬間に行われる
という違いになります。難しいですね。例題を書いてみましょう。(practice3.html)
var a1 = 3;
var a2 = 3;
var b1 = ++a1; // 前置インクリメント
var b2 = a2++; // 後置インクリメント
document.write("b1=" + b1 + ", b2=" + b2 + "<br>");
var c1 = a1;
var c2 = a2;
document.write("c1=" + c1 + ", c2=" + c2 + "<br>");
4行目はb1 = ++a1; です。++a1は、記述された瞬間に処理が行われるわけですから、a1は++a1となった段階で、3から4に1プラスされますので、b1には、4が代入されます。
5行目は、b2 = a2++;です。行の処理が終わるまでは1インクリメントされませんので、b2に代入する処理を行う段階ではまだa2は3です。つまり、b2には3が入ります。
5行目の処理が終わり、6行目の「document.write(...」の処理が始まる直前にa2に1加算され、4になります。
8行目9行目の c1 = a1; c2=a2; はどちらも4になっていますので、cには4が代入されます。
ということでこれの画面は以下のようになります。