→
指定の文字列を指定の基数(数学的記数法の底)で解析し、整数値を返します。
string | 解析する値。この引数が文字列でない場合、抽象操作 を用いて文字列に変換されます。
この引数では先頭のホワイトスペースは無視されます。 |
---|---|
radix | 省略可。2 から 36 までの整数で、string の基数(数学的記数法の底)を表します。
これは既定値が 10 ではないので注意してください。 |
指定された string を解析した整数値です。
また、下記の場合は NaN が返されます:
parseInt 関数は第 1 引数を文字列に変換し、解析したうえで、整数または NaN を返します。
返値は NaN でない場合は、第 1 引数を指定された radix で数値として解釈した整数値になります。(例えば、radix が 10 であれば 10 進数からの変換で、8 であれば 8 進数からの変換で、16 であれば 16 進数からの変換、などです。)
10 以上の基数については、9 より大きい数字はアルファベットで示されます。たとえば、16進数(基数 16)では A から F が用いられます。
parseInt 関数は指定された radix における数字ではない文字に出会うと、それ以降の文字を無視し、その時点で解析された整数値を返します。parseInt は数値を整数に切り捨てます。前後に空白があっても構いません。
数値によっては e の文字を文字列表現の中で使用しますので(例えば 6.022e23 は 6.022 × 1023 を表します)、parseInt を使用して数値を切り捨てると、とても大きな数字やとても小さな数字を使用する際に予期しない結果を生み出すことがあります。parseInt を Math.floor() の代用として使うべきではありません。
parseInt は 2 つの符号を正確に理解します。「+」は正の符号で、「-」は負の符号です(ECMAScript 1 より)。これは解析の最初の段階で、ホワイト スペースを除去した後に行われます。符号が見つからなかった場合は、アルゴリズムは次の段階に移行します。そうでなければ、符号を取り除いて残りの文字列の数値の解析を実行します。
radix が undefined、0、または指定されなかった場合、JavaScript 以下のように仮定します。
初めの文字が数値に変換できないときは、parseInt は NaN を返します。
数値演算の目的では、NaN は基数がいくつであっても数値にはなりません。isNaN 関数を使うと、parseInt の結果が NaN であるかどうか確かめられます。数値演算で NaN が与えられると、演算結果も NaN になります。
数値を特定の基数で文字列リテラルに変換したいときは、thatNumber.toString(radix) を使用してください。
BigInt の警告: parseInt は BigInt を Number へ変換するので、その処理中に精度が落ちます。これは後に付く数値ではない値が、"n" を含めて、切り落とされるからです。
ECMAScript 3 で非推奨となり、ECMAScript 5 で廃止されたものの、多くの実装が 0 で始まる数字の文字列を 8進数として解釈します。以下の式は 8 進数とされることもあれば、10 進数で扱われることもあります。つねに radix を指定すれば、信頼できない動作を防ぐことができます。
D=parseInt('0e0'); //=0 D=parseInt('08'); //=0。'8' は 8進数では用いられないため。
ECMAScript 5 仕様書において parseInt 関数は、0 の文字で始まる文字列を 8 進数として扱うことをもはや実装に認めなくなりました。
ECMAScript 5 では次のように宣言しています:
これは、ECMAScript 3 が 8 進数の解釈を非推奨(ただし許容)としていたのとは異なります。
2013年現在、多くの実装はまだこの仕様に対応していません。そして、古いブラウザーの対応が必要なので、つねに基数を指定してください。
場合によっては、値の整数への解析により厳密な方法を採るのも有効でしょう。
正規表現が役立ちます:
//コンソールにて function filterInt(value) { if (/^[-+]?(\d+|Infinity)$/.test(value)) { return Number(value) } else { 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
以下の例はいずれも 15 を返します。
D=parseInt('0xF', 16); D=parseInt('F', 16); D=parseInt('17', 8); D=parseInt(021, 8); D=parseInt('015', 10); D=parseInt(015, 10); //=13 D=parseInt(15.99, 10); D=parseInt('15,123', 10); D=parseInt('FXX123', 16); D=parseInt('1111', 2); D=parseInt('15 * 3', 10); D=parseInt('15e2', 10); D=parseInt('15px', 10); D=parseInt('12', 13);
以下の例はいずれも NaN を返します。
D=parseInt('Hello', 8); // まったく数字ではない D=parseInt('546', 2); // 2進数では 0 または 1 以外の数字は無効
以下の例はいずれも -15 を返します。
D=parseInt('-F', 16); D=parseInt('-0F', 16); D=parseInt('-0XF', 16); D=parseInt(-15.1, 10); D=parseInt('-17', 8); D=parseInt('-15', 10); D=parseInt('-1111', 2); D=parseInt('-15e1', 10); D=parseInt('-12', 13);
以下の例はいずれも 4 を返します。
D=parseInt(4.7, 10); D=parseInt(4.7 * 1e22, 10); // 非常に大きな数によって 4 になる D=parseInt(0.00000000000434, 10); // 非常に小さな数によって 4 になる
以下の例は 1e+21(基数を含む)より大きいか、1e-7(基数を含む)より小さい場合は 1 を返します。(基数 10 を使用している場合)。
D=parseInt(0.0000001,10); //=1 D=parseInt(0.000000123,10); //=1 D=parseInt(1e-7,10); //=1 D=parseInt(1000000000000000000000,10); //=1 D=parseInt(123000000000000000000000,10); //=1 D=parseInt(1e+21,10); //=1
D=parseInt('0e0', 16); //=224
BigInt の値は精度が落ちます。
D=parseInt('900719925474099267n'); //=900719925474099300
parseInt は数字の区切り文字は機能しません。
D=parseInt('123_456'); //=123