JavaScriptのNumberとparseIntの違いは?

JavaScript: Number vs. parseInt - 文字列を数値に変換する方法

JavaScript: Number vs. parseInt - 文字列を数値に変換する方法

JavaScriptで文字列を数値に変換する際に、`Number` と `parseInt` のどちらを使うべきか迷ったことはありませんか?どちらも数値への変換に使えますが、その動作には大きな違いがあります。この記事では、それぞれの関数について詳しく解説し、状況に応じて適切な方を選択できるようにします。

parseInt: 文字列の先頭から整数値を取得する

`parseInt`関数は、文字列を受け取り、その文字列の先頭から数字部分を読み取って整数値に変換します。変換できない文字に遭遇するか、文字列の最後まで到達すると、そこで変換を終了します。変換に成功した場合は整数値を、失敗した場合は`NaN` (Not a Number) を返します。

parseInt の動作

以下の表は、`parseInt` がどのように文字列を整数値に変換するかを示しています。

文字列 parseInt の結果 解説
"123" 123 文字列全体が数字なので、整数値に変換されます。
"123px" 123 先頭から数字部分 "123" が変換され、"px" は無視されます。
"abc123" NaN 先頭が数字ではないため、変換に失敗します。
"12.34" 12 小数点以下は切り捨てられます。

parseIntの使用例


<script>
  const str1 = "123";
  const num1 = parseInt(str1); 
  console.log(num1); // 123

  const str2 = "10.5px";
  const num2 = parseInt(str2); 
  console.log(num2); // 10
</script>

Number: 文字列全体を数値に変換する

`Number`関数は、文字列全体を解釈し、可能な限り数値に変換しようとします。整数、小数、指数表記など、様々な形式の数値に対応しています。変換できない文字列が渡された場合は、`parseInt`と同様に `NaN` を返します。

Number の動作

以下の表は、`Number` がどのように文字列を数値に変換するかを示しています。

文字列 Number の結果 解説
"123" 123 整数値として解釈されます。
"12.34" 12.34 小数値として解釈されます。
"1e3" 1000 指数表記として解釈されます。
"123px" NaN 数字以外の文字が含まれているため、変換に失敗します。

Numberの使用例


<script>
  const str1 = "123";
  const num1 = Number(str1);
  console.log(num1); // 123

  const str2 = "12.34";
  const num2 = Number(str2);
  console.log(num2); // 12.34
</script>

どちらの関数を使うべきか?

`parseInt` と `Number` のどちらを使うべきかは、状況によって異なります。

* **文字列の先頭から整数値だけを取得したい場合:** `parseInt` を使用します。 * **文字列全体を解釈して、整数、小数、指数表記など、可能な限り数値に変換したい場合:** `Number` を使用します。

まとめ

`parseInt` と `Number` はどちらも JavaScript で文字列を数値に変換するために使用されますが、その動作には違いがあります。それぞれの関数の特性を理解し、状況に応じて適切な方を選択することが重要です。

参考文献

よくある質問

Q1: parseInt で基数を指定する必要があるのはなぜですか?

A1: `parseInt` は、2 つ目の引数として基数を指定することができます。基数は、変換元の文字列がどのような進数で表されているかを示します。例えば、"1010" という文字列を2進数として解釈したい場合は、`parseInt("1010", 2)` のように基数に 2 を指定します。基数を省略した場合、デフォルトでは 10 進数として解釈されますが、先頭に "0x" や "0X" が付いている場合は 16 進数として解釈されるなど、状況によって解釈が変わる可能性があるため、明示的に指定することが推奨されます。

Q2: Number 関数はどのような時に NaN を返しますか?

A2: `Number` 関数は、文字列全体を数値として解釈できない場合に `NaN` を返します。例えば、数字以外の文字が含まれている場合や、空文字列などが該当します。また、`Infinity` や `-Infinity` を表す文字列も `NaN` を返します。

Q3: 文字列を数値に変換する方法として、他にどのようなものがありますか?

A3: `parseInt` や `Number` の他に、単項プラス演算子 (`+`) を使用する方法もあります。この方法は、`Number` 関数と同様に文字列全体を解釈して数値に変換しようとしますが、`Number` 関数よりも短い記述で済むというメリットがあります。ただし、`parseInt` や `Number` とは異なり、エラー処理が組み込まれていないため、注意が必要です。

その他の参考記事:JavaScript Number 数値オブジェクト