JavaScriptのparseIntは第2引数にちゃんと進数を指定する

2010-09-29 (水)
カテゴリー :
JavaScript
タグ :
Pocket

parseIntに0(ゼロ)から始まる値を入れると8進数として処理される

JavaScript をよく使う人は必ずといっていいほど出会うと思われるトラップじゃないでしょうか。日付関係の処理のとき、桁あわせで01月とか07日とか使うことって結構あると思うのですが、それらを整数として処理するために parseInt に入れる時に、よくはまる罠です。

//第2引数の進数指定なし
parseInt("01"); // 1
parseInt("07"); // 7
parseInt("08"); // 0
parseInt("10"); // 10

//第2引数に10進数を指定
parseInt("01", 10); // 1
parseInt("07", 10); // 7
parseInt("08", 10); // 8
parseInt("10", 10); // 10

値の先頭に0(ゼロ)が付くと8進数として処理するため、1から7までは結局同じで、8のときに初めて0が出力されて気づくことが多い。ちなみに0xで始めると16進数。
というわけで、整数変換のときは第2引数に10をお忘れなく。なんせシステムを組んだのが8月か9月だと気づきやすいけど、10月にでも組もうものなら11ヵ月後に発覚するという恐ろしい時限式バグですね。気をつけましょう。

ちなみに eval() 使ってもNumber型に変換してくれるっぽいです。

eval("01"); // 1
eval("07"); // 7
eval("08"); // 8
eval("10"); // 10
Pocket

Leave a comment

※ 本サイトのコメントは承認制です。
※ コメント送信後すぐには表示されない可能性がありますのでご注意ください。

twitter : @krengt

[PR]

人気の記事