parseInt()
引数の文字列を解析し、別の引数として指定した基数の整数を返します。
文法
parseInt(string, radix);
| 引数 | 説明 |
|---|---|
| string | 解析する値を指定します。 文字列では無い場合は、文字列に変換されます。 文字列内の先頭の空白は無視されます。 |
| radix |
上記で説明されているstringの基数となる2~36の整数を指定します。
この引数を常に指定することで、読み手の混乱を避け、どのような動作をするのか予測できるようにしてください。
radixが指定されない場合、実装の違いによって異なる結果になる可能性があります。
|
説明
parseInt関数は1つの目の引数を文字列へ変換・解析し、整数またはNaNを返します。
もしNaNで無ければ、戻り値は1つ目の引数を、radixの基数で表される数値になります。
例えば、radixが10であれば10進数から、8であれば8進数から、16であれば16進数から変換するといった具合です。
radixが10より大きい場合、9より大きい数はアルファベット文字で表されます。
例えば、16進数ではAからFが使用されます。
parseIntが指定された基数の数ではない文字を見つけた場合、
その文字とそれ以降の文字を無視し、その位置までを解析した結果の値を返します。
parseIntは整数の値になるように数値の切り捨てを行います。
先頭と末尾の空白は、取り除かれた上で解析されます。
radixがundefinedまたは0(または省略)の場合、
JavaScriptは次のようにみなして処理を行います。
-
1つ目の引数
stringが"0x"または"0X"で始まる場合、radixは16(16進数)となり、残りの文字列が解析されます。 -
1つ目の引数
stringが"0"から始まる場合、radixは8(8進数)または10(10進数)になります。 厳密に言えば、radixは実装依存によってどちらかを選択します。 ECMAScript 5は10(10進数)を使用することを指定しますが、全てのブラウザでこれがサポートされているわけではありません。 こういった理由から、parseIntを使用する際には常にradixを指定するようにしてください。 -
1つ目の引数
stringがその他の値から始まる場合、radixは10(10進数)になります。
もし、1文字目が数値に変換出来ない場合、parseIntはNaNを返します。
算術的な理由から、NaN値はどのradixであっても数値にはなりません。
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);
radix引数無しで8進数と解釈される挙動について
ECMAScript 3によって使用しないことを推奨され、ECMAScript 5によって禁止されていますが、
多くの実装では0から始まる数値文字列を8進数として解釈します。
下記の結果は8進数になるかもしれませんし、10進数になるかもしれません。
このような信頼できない挙動を避けるために、常にradix引数を指定してください。
parseInt("0e0"); // 0
parseInt("08"); // 0, '8'は8進数の数値ではありません。
ECMAScript 5の8進数として解釈を削除
ECMAScript 5によるparseInt関数の仕様では、
0の文字から始まる文字列を8進数として扱う実装を禁止しています。
ECMAScript 5では次のように述べられています。
parseIntは、string引数を指定されたradixに従って解釈することで、
数値を生成します。
文字列内の末尾に続く空白は無視されます。
もし、radixがundefinedまたは0の場合は、
16進数としてみなされる0xまたは0Xのペアから始まる数値の場合を除き、10(10進数)とみなされます。
もしradixに16を指定するのであれば、先頭の0xまたは0Xのペアの文字を、
任意にすることも可能です。
これが、ECMAScript 3の8進数の解釈において推奨されないが禁止もされないECMAScript 5と異なる部分です。
2013年の時点で、多くの実装でこの挙動が取り込まれていない事と、
古いブラウザをサポートする必要があることから、常にradixを指定してください。
より厳格な解析関数
より厳格な方法で、浮動小数点数の値を解析することが求められるケースがあります。 正規表現の使用がこの助けとなってくれます。
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
仕様
ブラウザ互換性
| 機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
|---|---|---|---|---|---|
| 基本 | ◯ | ◯ | ◯ | ◯ | ◯ |
| 機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
|---|---|---|---|---|---|---|
| 基本 | ◯ | ◯ | ◯ | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。