JavaScriptで数値かどうかを判定する方法
JavaScriptで変数が数値かどうかを判定する方法はいくつかあります。適切な方法は、コードのコンテキストや期待される入力によって異なります。この文章では、いくつかの一般的な方法と、それぞれが適している状況について詳しく説明します。
1. `typeof` 演算子
`typeof` 演算子は、変数のデータ型を文字列として返します。数値の場合、"number" を返します。
<script>
const num = 10;
const str = "10";
console.log(typeof num); // "number"
console.log(typeof str); // "string"
</script>
ただし、`typeof` 演算子は、`NaN` (Not a Number) も "number" として扱うことに注意が必要です。
2. `isNaN()` 関数
`isNaN()` 関数は、値が数値に変換できない場合に `true` を返し、そうでない場合は `false` を返します。これは、ユーザー入力が数値に変換できるかどうかを確認する場合に便利です。
<script>
console.log(isNaN(10)); // false
console.log(isNaN("10")); // false
console.log(isNaN("hello")); // true
console.log(isNaN(NaN)); // true
</script>
3. `Number.isNaN()` メソッド
`Number.isNaN()` は静的メソッドで、渡された値が数値型の `NaN` であるかどうかを判定します。 入力が数値型でなかった場合は `false` を返します。 `isNaN()` 関数との違いは、`Number.isNaN()` は引数を数値に変換しようとしないことです。
<script>
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(10)); // false
console.log(Number.isNaN("10")); // false
console.log(Number.isNaN("hello")); // false
</script>
4. `parseInt()` & `parseFloat()` 関数
文字列を数値に変換する必要がある場合は、`parseInt()` 関数または `parseFloat()` 関数を使用できます。これらの関数は、文字列を数値に変換できない場合に `NaN` を返します。
<script>
console.log(parseInt("10")); // 10
console.log(parseFloat("10.5")); // 10.5
console.log(parseInt("hello")); // NaN
</script>
方法の比較
以下の表は、上記の方法の違いをまとめたものです。
方法 | 説明 |
---|---|
`typeof` | データ型が "number" かどうかを確認します。 `NaN` も "number" として扱われます。 |
`isNaN()` | 値が数値に変換できるかどうかを確認します。数値に変換できない場合は `true` を返します。 |
`Number.isNaN()` | 値が数値型の `NaN` であるかどうかを確認します。数値型でない場合は `false` を返します。 |
`parseInt()`, `parseFloat()` | 文字列を数値に変換します。変換できない場合は `NaN` を返します。 |
参考資料
FAQ
Q1: `isNaN()` と `Number.isNaN()` の違いは何ですか?
A1: `isNaN()` は、引数を数値に変換しようとしますが、`Number.isNaN()` は変換しようとせず、引数が数値型の `NaN` かどうかを直接チェックします。そのため、`isNaN()` は `"hello"` のような文字列に対しても `true` を返しますが、`Number.isNaN()` は `false` を返します。
Q2: どの方法が最適ですか?
A2: 最適な方法は、状況によって異なります。 単純にデータ型が "number" かどうかを確認したい場合は `typeof` を使用します。 値が数値に変換できるかどうかを確認したい場合は `isNaN()` を使用します。 値が数値型の `NaN` かどうかを厳密に確認したい場合は `Number.isNaN()` を使用します。 文字列を数値に変換したい場合は `parseInt()` または `parseFloat()` を使用します。
Q3: `typeof NaN` が "number" を返すのはなぜですか?
A3: これは JavaScript の歴史的な理由によるものです。 `NaN` は IEEE 754 標準で定義された特別な数値であり、数値型として扱われます。 混乱を避けるために、`Number.isNaN()` を使用することをお勧めします。
その他の参考記事:JavaScript 関数呼び出し