parseInt()関数は、第1引数の文字列を解析(パース)し、第2引数に与えられた基数(数学的記数法の底)にもとづく整数を返します。

構文

parseInt(string, radix);

引数

string
解析する値。引数stringが文字列でなければ、(抽象操作ToStringにより)文字列に変換されます。このとき、値の始まりの空白文字は無視されます(「ECMAScript® 2015 Language Specification」18.2.5「parseInt (string , radix)」参照)。
radix
2から36までの整数で、前述の文字列に対する基数(数学的記数法の底)を与えます。一般に使われる10進法には、10を定めます。この引数を必ず渡すことにより、誤解を防ぎ、意図した動作が導けます。基数が与えられない場合、実装が異なれば異なる結果になります。

説明

parseInt()関数は第1引数を文字列に変換し、解析したうえで、整数またはNaNを返します。戻り値は、NaNでなければ、第1引数のstringを第2引数radixの基数によって示す10進数の整数です。たとえば、radixが10なら10進数、8は8進数、16であれば16進数による変換を意味します。10以上の基数については、9より大きい数字はアルファベットで示されます。たとえば、16進数(基数16)ではAからFが用いられます。

parseInt()関数が第1引数の文字列の中に第2引数の基数で数字とされない文字を認めると、それ以降の文字は無視され、そこまでの値を解析した整数値が返されます。parseInt()関数は数値を整数に切り捨てます。第1引数の文字列の前と後の半角スペースは無視されます。

第2引数のradixundefinedか0の(または与えられていない)場合は、JavaScriptはつぎのように解釈します。

  • 第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進法)とされます。

第1引数の初めの文字が数値に変換できないときは、parseInt()関数はNaNを返します。

数値演算をしようとしたとき、NaNは基数がいくつであっても数値にはなりません。isNaN関数を使うと、parseInt()関数の戻り値がNaNであるかどうか確かめられます。数値演算でNaNが与えられると、演算結果はNaNになります。

数値を一定の基数で文字列リテラルに変換したいときは、intValue.toString(radix)を用います。

parseInt()関数の使い方

以下の例はいずれも15を返します。

parseInt(" 0xF", 16);
parseInt(" F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10);
parseInt(15.99, 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15*3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);

以下の例はいずれもNaNを返します。

parseInt("Hello", 8); // まったく数字ではない
parseInt("546", 2);   // 各桁の数字が2進数に適さない

以下の例はいずれも-15を返します。

parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10)
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);

以下の例は224を返します。

parseInt("0e0", 16);

基数を与えない8進数の解釈

ECMAScript 3では推奨されず、ECMAScript 5で認められなくなったものの、多くの実装は0で始まる数字の文字列を8進数として解釈します。以下の式は8進数とされることもあれば、10進数で扱われることもあります。つねに基数を与えれば、予想しない動きが防げます

parseInt("0e0"); // 0
parseInt("08"); // 0, "8"は8進数では用いられない。

ECMAScript 5は8進数の解釈を削除

ECMAScript 5仕様におけるparseInt()関数は、文字0で始まる文字列を8進数として扱うことはもはや認めない実装になりました。ECMAScript 5仕様はつぎのように述べます。

parseInt関数は、引数stringの内容について与えられたradixにより解釈して定められた整数値を生成します。値の始まりの空白文字は無視されます。radixがundefinedまたは0のときは、10とみなされます。ただし、数字の初めのふた文字が0xまたは0Xの場合には、radixは16として扱われます。

これは、ECMAScript 3が推奨はしなかったものの8進数の解釈を認めていたのと異なります。

2013年現在、多くの実装はまだこの仕様を採り入れていません。したがって、古いブラウザに対応するためには、つねに第2引数に基数を与えてください

より厳密な解析関数

場合によっては、値の整数への解析により厳密な方法を採るのも有効でしょう。正規表現が役立ちます。

filterInt = function (value) {
  if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
    return Number(value);
  return NaN;
}

console.log(filterInt('421'));               // 421
console.log(filterInt('-421'));              // -421
console.log(filterInt('+421'));              // 421
console.log(filterInt('Infinity'));          // Infinity
console.log(filterInt('421e+0'));            // NaN
console.log(filterInt('421hop'));            // NaN
console.log(filterInt('hop1.61803398875'));  // NaN
console.log(filterInt('1.61803398875'));     // NaN

仕様

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard 初期定義
ECMAScript 5.1 (ECMA-262)
The definition of 'parseInt' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'parseInt' in that specification.
Standard  

ブラウザの互換性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

参考情報

ドキュメントのタグと貢献者

 このページの貢献者: FumioNonaka, teoli, ethertank, Potappo, Mgjbot
 最終更新者: FumioNonaka,