こんにちは、プログラマーの鳥よしです。
今日は、つい最近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進数
ではまた。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。