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の更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。