Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

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

構文

parseInt(string, radix);

引数

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

戻り値

与えられた文字列を解析した整数値です。最初の文字を数値に変換できない場合、NaN が返されます。

説明

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(015, 10); は 13 を返す。
parseInt(15.99, 10);
parseInt("15,123", 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) 標準 初期定義
ECMAScript 5.1 (ECMA-262)
parseInt の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
parseInt の定義
標準  
ECMAScript 2017 Draft (ECMA-262)
parseInt の定義
ドラフト  

ブラウザの互換性

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) ? (有)
0で始まる文字列を8進法ではなく10進法として解析 (有) 21 (有) (in standards mode) ? (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)
0で始まる文字列を8進法ではなく10進法として解析 ? ? 21 ? ? ?

参考情報

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

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