旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[JavaScript] ビット演算は32ビットまで

2012年11月28日

JavaScriptのビット演算子が正しく扱えるのは
32ビットの値の範囲だけのようです

例えば、よく自分は parseInt の替わりに ~~(1の補数を2回) をしていますが
その範囲を超えると意図したように動きません

> ~~2147483647
2147483647
> ~~2147483649
-2147483647 // 値が変わっている

(new Date()).getTime() の値を文字列と相互変換している時に気付きました

> var dateStr = String((new Date()).getTime())
> dateStr
"1354079055775"
> ~~dateStr
1164357535

蛇足: parseInt と ~~ の違い

> parseInt('')
NaN
> parseInt(null)
NaN
> parseInt(undefined)
NaN
> ~~''
0
> ~~null
0
> ~~undefined
0

Readableかはさておき、parseInt より便利なんすよねー
NaN にするならエラーにして欲しいなぁ