Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Web/JavaScript/Reference/Global_Objects/parseInt を更新 #23986

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: parseInt()
slug: Web/JavaScript/Reference/Global_Objects/parseInt
l10n:
sourceCommit: 732e4808b512db2bdb3fd0c561323d302a003a0e
sourceCommit: 8421c0cd94fa5aa237c833ac6d24885edbc7d721
---

{{jsSidebar("Objects")}}
Expand All @@ -21,7 +21,7 @@ parseInt(string, radix)
### 引数

- `string`
- : 整数で始まる文字列です。この引数では先頭の{{glossary("whitespace", "ホワイトスペース")}}は無視されます。
- : 整数で始まる文字列です。この引数では先頭の{{Glossary("whitespace", "ホワイトスペース")}}は無視されます。
- `radix` {{optional_inline}}

- : `2` から `36` までの整数で、`string` の*基数*(数学的記数法の底)を表します。これは [32 ビット整数](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#fixed-width_number_conversion)に変換されます。変換後にそれが 0 でなく、 \[2, 36] の範囲外であった場合、この関数は常に `NaN` を返します。`0` または指定されなかった場合、基数は `string` の値に基づいて推測されます。既定で常に `10` になるわけではありません。[下記の解説](#解説)では、 `radix` が提供されなかった場合に何が起こるかをもっと詳細に説明しています。
Expand All @@ -30,15 +30,15 @@ parseInt(string, radix)

指定された `string` を解釈した整数値です。また、次の場合は {{jsxref("NaN")}} が返されます。

- `radix` `2` よりも小さいか `36` よりも大きい、または
- `radix` を 32 ビット整数にした値が `2` よりも小さいか `36` よりも大きい、または
- ホワイトスペース以外の最初の文字が数値に変換できない。

> [!NOTE]
> JavaScript は言語レベルで「浮動小数点数」と「整数」の区別がありません。 `parseInt()` と [`parseFloat()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) は解釈の動作が異なるだけで、必ずしも返値が異なるわけではありません。例えば、 `parseInt("42")` と `parseFloat("42")` は同じ値である数値型の 42 を返します。

## 解説

`parseInt` 関数は[第 1 引数を文字列に変換し](/ja/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion)、解釈したうえで、整数または `NaN` を返します。
`parseInt` 関数は[第 1 引数を文字列に変換し](/ja/docs/Web/JavaScript/Reference/Global_Objects/String#文字列変換)、解釈したうえで、整数または `NaN` を返します。

`NaN` でない場合は、返値は第 1 引数を指定された `radix` で数値として解釈した整数値になります。(例えば、`radix` が `10` であれば 10 進数からの変換で、`8` であれば 8 進数からの変換で、`16` であれば 16 進数からの変換、などです。)

Expand All @@ -48,7 +48,7 @@ parseInt(string, radix)
2. 入力された `string` が他の何らかの値で始まる場合、基数は `10` (10 進数)になります。

> [!NOTE]
> 他にも `0b` のような接頭辞は[数値リテラル](/ja/docs/Web/JavaScript/Reference/Lexical_grammar#2_進数)では有効ですが、 `parseInt()` では通常の数字として扱われます。 `parseInt()` は `0` で始まる文字列を 8 進数の値として扱うことはありません。 `parseInt()` が認識できる接頭辞は、16 進数の値に対する `0x` または `0X` だけです。 `radix` がなければ、それ以外はすべて 10 進数として解釈されます。
> 他にも `0b` のような接頭辞は[数値リテラル](/ja/docs/Web/JavaScript/Reference/Lexical_grammar#2_進数)では有効ですが、 `parseInt()` では通常の数字として扱われます。 `parseInt()` は `0` で始まる文字列を 8 進数の値として扱うことはありません。 `parseInt()` が認識できる接頭辞は、16 進数の値に対する `0x` または `0X` だけです。 `radix` がなければ、それ以外はすべて 10 進数として解釈されます。 [`Number()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/Number) または [`BigInt()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt) を使用して、これらの接頭辞を解釈することができます。

基数が `16` の場合、 `parseInt()` では、オプションで符号文字 (`+`/`-`) の後に `0x` または `0X` を接頭辞として文字列を指定することができます。

Expand All @@ -60,12 +60,11 @@ parseInt(string, radix)

もし `parseInt` が `radix` で指定された基数に含まれる数字以外の文字に遭遇した場合、その文字とそれに続くすべての文字を無視し、この点まで解釈できた整数値を返します。例えば、 `1e3` は技術的には整数をエンコードしたものですが、(そして [`parseFloat()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/parseFloat) では正しく `1000` と解釈されますが)、 `parseInt("1e3", 10)` は `1` を返します。 `e` は基数 10 の有効な数字ではないからです。 `.` も数字ではないので、返値は常に整数になります。

最初の文字が使用している基数で数字に変換できなかった場合は、 `parseInt` は `NaN` を返します。
先頭のホワイトスペースは許容されます。
最初の文字が使用している基数で数字に変換できなかった場合は、 `parseInt` は `NaN` を返します。先頭のホワイトスペースは許容されます。

数値演算の目的では、`NaN` は基数がいくつであっても数値にはなりません。 [`Number.isNaN`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) 関数を使うと、 `parseInt` の結果が `NaN` であるかどうか確かめられます。数値演算で `NaN` が与えられると、演算結果も `NaN` になります。

巨大な数値では `e` の文字を文字列表現の中で使用しますので(例えば **`6.022E23`** は 6.022 × 10^23 を表します)、`parseInt` を使用して数値を切り捨てると、とても大きな数字やとても小さな数字を使用する際に予期しない結果を生み出すことがあります。 `parseInt` を {{jsxref("Math.trunc()")}} の代用として使うべきではありません。
巨大な数値では `e` の文字を文字列表現の中で使用しますので(例えば `6.022E23` は 6.022 × 10^23 を表します)、`parseInt` を使用して数値を切り捨てると、とても大きな数字やとても小さな数字を使用する際に予期しない結果を生み出すことがあります。 `parseInt` を {{jsxref("Math.trunc()")}} の代用として使うべきではありません。

数値を基数を指定してその文字列表現に変換するには、[`thatNumber.toString(radix)`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) を用います。

Expand All @@ -81,7 +80,7 @@ parseInt(string, radix)
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt("015", 10); // ただし `parseInt('015', 8)` は 13 を返す
parseInt("015", 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
Expand Down Expand Up @@ -131,7 +130,7 @@ BigInt("900719925474099267");
// 900719925474099267n
```

`parseInt` は[数値の区切り文字](/ja/docs/Web/JavaScript/Reference/Lexical_grammar#numeric_separators)を扱うことができません。
`parseInt` は[数値の区切り文字](/ja/docs/Web/JavaScript/Reference/Lexical_grammar#数値の区切り文字)を扱うことができません。

```js example-bad
parseInt("123_456"); // 123
Expand All @@ -146,7 +145,7 @@ parseInt(null, 36); // 1112745: "null" の文字列は 36 進数で 1112745
parseInt(undefined, 36); // 86464843759093: "undefined" の文字列は 36 進数で 86464843759093
```

一般に、 {{jsxref("Math.trunc()")}} の代用として使用するのは良くない考えです。小さな数では使えるかもしれません。
一般に、`parseInt()` を文字列以外で使用すること、特に {{jsxref("Math.trunc()")}} の代用として使用するのは良くない考えです。小さな数では使えるかもしれません。

```js
parseInt(15.99, 10); // 15
Expand Down Expand Up @@ -177,11 +176,11 @@ parseInt(1e21, 10); // 1

## 関連情報

- {{jsxref("Global_Objects/parseFloat", "parseFloat()")}}
- [`Number()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/Number)
- {{jsxref("parseFloat()")}}
- [`Number()` コンストラクター](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/Number)
- {{jsxref("Number.parseFloat()")}}
- {{jsxref("Number.parseInt()")}}
- {{jsxref("Global_Objects/isNaN", "isNaN()")}}
- {{jsxref("isNaN()")}}
- {{jsxref("Number.prototype.toString()")}}
- {{jsxref("Object.prototype.valueOf()")}}
- [`BigInt()`](/ja/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt)
- [`BigInt()` コンストラクター](/ja/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt)