デクリメント/1減算

JavaScriptではC言語等のようにデクリメントをサポートしています。デクリメントは変数から1を減算するものです。例えば変数nをデクリメントするには以下のように指定します。

n--

変数nに12が入っていれば1が減算され12になります。(サンプル01を実行する)
変数の内容が数値ではなく文字列になっている場合には、数値型に変換されてからデクリメントされます。変換することができない場合にはデクリメントするとNaN (Not a Number) となります。C言語などと異なり16ビット、32ビットまでの値しか扱うことができないという制限はありません。ただし、非常に小さな値(負の無限値など)をデクリメントした場合には値ではなく-Infinityを返します。また、C言語などと異なり小数値に対してもデクリメントを行うことができます。例えば2.15をデクリメントした場合、3.15となります。ただし、小数値を減算すると演算誤差が発生することがあるので注意が必要です。(サンプル02を実行する)

変数から1を減算するのであれば以下のように指定しても基本的には同じです。

n = n - 1
または
n -= 1

しかし、同じになるのは単独で行った場合で、式やプロパティに代入する場合には上記とは異なった結果になります。サンプル01では画面には12が表示されましたが、n-1にすると画面には11が表示されます。(サンプル03を実行する)
これはデクリメントは先に処理が行われた後に減算が行われるためです。つまりdocument.write(n--)であればdocument.write(n);n=n-1;と同じになります。逆に先にデクリメントしてしまうこともできます。例えば変数nの値が評価される前に減算するには以下のように記述します。(サンプル04を実行する)

--n

先に減算する場合はプリデクリメント、後で減算する場合はポストデクリメントと呼びます。BASICやJavaなど高級言語ではデクリメントの恩恵は、あまり感じないかもしれませんが、マシン語などでは連続してメモリ内を読み出したり、書き込んだりする場合には多大な威力を発揮してくれます。

変数だけでなくプロパティ値もデクリメントの対象にできると書きましたが、そうではない場合もあります。例えばスタイルシートのプロパティなどは単純にデクリメントしても正しい結果を得ることはできません。(サンプル05を実行する)
スタイルシートの場合は単純な数値ではなく単位が付属している場合があるためです。この単位を削除するにはparseInt()を使います。その後、デクリメントではなく普通に1を減算して新たな値として設定しなければなりません。(サンプル06を実行する)

他にもバージョン番号なども"2.0.3"のようになっている場合にはデクリメントすることはできません。(サンプル07を実行する)
"2.0"のように数値型に変換できる場合には、文字列が数値に変換されデクリメントすることができます。(サンプル08を実行する)

最終更新日:2007年1月6日

>目次に戻る