[JavaScript] 条件分岐の結果にもとづいて変数の値をインクリメント or デクリメントしたい場合の書き方3パターン

追記: 2012.1.22
パターン3のサンプルコードにて、括弧の数に誤りがあったので訂正しました。

以下のレクチャー動画に、表題の件について3パターンが紹介されていたので、忘れないようにメモ。当たり前の人にとっては当たり前なのかもしれませんが、最後1パターンについては僕は知らなかったので。

Prototypal Inheritance and Refactoring the Slider | Tuts+ Premium | The best way to learn creative and technical skills.

パターン1

簡単。普通のif文。なんの変哲もありません。

パターン2

次は、三項演算子。自分は割りと好きです。

パターン3

最後。ビット反転演算子「~」を使うパターン。これは知りませんでした。

ちょっと解説してみようと思います。

「~」はビット反転演算子。その名の通り、変数の値をビット反転させた結果を求めることができます。「~~」はビット反転演算子を2回繰り返すということ。

もし上のサンプルコードの条件式が「true」として評価された場合、

となり、変数posに「1」が加算されます。つまりインクリメント。

反対に条件式が「false」として評価された場合、

となり、「||」の左辺が「false」と評価されるため(JavaScriptでは「1」以外の値はfalse)、「||」の右辺、つまり「-1」が変数posに加算されます。つまりデクリメント。

まとめ

パターン3では、ビット反転演算子を2回重ねることで真偽値を整数値にキャストできることを利用しています。

パターン2で十分なような気もしますが、パターン3を使う理由として具体的に何があるんでしょうか?

ちょっとわからなかったので、詳しい方教えていただけると幸いです。
それでは!