NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2013.05.24

JavaScriptでparseIntする場合は基数を指定しよう

鳥よし

こんにちは、プログラマーの鳥よしです。

今日は、つい最近JavaScriptで落とし穴に落ちた話を書きます。

落とし穴とは

ある日、僕はどうしてもJSで2桁表示の文字列をparseInt()したい場面に遭遇しました。
何も考えていない僕はparseInt(“01”)とブッこんで、実際に動作確認に入りました。
parseInt(“01”)、parseInt(“02”)、parseInt(“03”)・・・
順調に動作確認が進みました。

あるときです、恐ろしい現象が起こってしまったのです。
parseInt(“08”)にきたとき、結果が「0」となりました。
何を言ってるんだお前は・・・
見なかったことにしてparseInt(“09”)に行きました。
またしても結果は「0」・・・

もしやこれは噂の「疲れ目」って奴だな!

気を取り直してparseInt(“10”)に行ったとき、今まで起きていた現象はピタリとおさまりました。

ビビらせやがって・・・
そう思ってもう一回parseInt(“08”)を試してみると、結果は「0」・・・

なん・・・だと・・・?

原因

何でこうなったかっていうと、parseInt()は第二引数で基数を設定できるんですよね。
ちゃんとここに来るのは10進数なんだよって教えてあげないと、0から始まる文字は8進数と解釈されてしまうようです。

parseInt("08", 10);

これでちゃんと結果が8になりました。

ちなみに

以下のブラウザで確認したところ、各ブラウザによってデフォルトの基数が違うようでした。

  • Firefox 8進数
  • Chrome 10進数
  • IE9 10進数
  • Opera 8進数
  • Safari 10進数

ではまた。