[ Javascript ] 文字列を数値に変換 ( parseInt / Number )

Pocket

ここでは、Javascript で文字列を数値に変換する parseInt 関数および Number 関数のサンプルスクリプトを掲載しています。特に parseInt 関数には注意が必要です。

スポンサーリンク

文字列を数値に変換する parseInt 関数と Number 関数

parseInt 関数と Number 関数は次のように使用します。

var str = "123";
alert(parseInt(str)); // 123
alert(Number(str));   // 123

parseInt 関数の挙動

parseInt 関数は文字列が 0x で始る場合は 16進数として、0 で始る場合には 8進数として扱うために注意が必要です。

parseInt 関数の挙動

  • 第1引数のstringが「0x」または「0X」で始まるときは、第2引数のradixは16(16進法)としてその後の文字列を解析します。
  • 第1引数のstringが「0」で始まるときは、第2引数のradixは8(8進法)または10(10進法)とされます。厳密には、基数がどちらになるかは実装によります。ECMAScript 5 の仕様では10(10進法)です。ただし、まだすべてのブラウザがサポートしている訳ではありません。したがって、parseInt()関数を使うとき基数は必ず与えてください。
  • 第1引数のstringがその他の値で始まるときは、第2引数のradixは10(10進法)とされます。

従って、上記サンプルのように parseInt 関数の第2パラメータを省略することは NG です

// NG
var str = "08";
alert(parseInt(str)); // 0
alert(Number(str));   // 8

// OK
var str = "08";
alert(parseInt(str, 10)); // 8
alert(Number(str));       // 8

ありがちなバグ

HTML の select タグで(01 ~ 12)のように月を選択した文字列を使い、 parseInt 関数の第2パラメータを省略して数値に変換すると、期待しない動作となるのは 08 および 09 だけですので、テストをすり抜ける可能性があります。

このようなことからも parseInt 関数を使用する場合には、第2パラメータを省略することなく必ず指定する必要があります。

参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *