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引数のradixがundefined
か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 | ? | ? | ? |