JavaScriptで 8 を parseInt すると 0 になる問題

8が0になってしまう問題が発生した際に嵌まったのでメモ

var hoge = "08"
var piyo = parseInt(hoge);
// => 0 

こんな風に単純に数値型にしてくれるだけではなく、

parseInt("10")         -->  10
parseInt("2008year")   -->  2008
parseInt("-77point")   -->  -77
[引用参考]『parseInt関数 – グローバル関数 – JavaScript入門』より

こんな風に適当な基数に変換してくれます。

parseInt("0x37")       -->  55
parseInt("37")         -->  37

問題はここで、
先頭に0のあるhogeは8進数と判断されて0に変換されしまったのです。

parseIntは基数を指定できます。(指定できる値は「2」「8」「10」「16」)
ですので、きちんと10進数を指定してやれば

var piyo = parseInt(hoge, 10);

0には変換されずに期待通りの値が取得できるはずです。

要はちゃんと基数を指定しろって事ですね。

twitterfacebookhatenafacebook