JavaScriptのisNaN関数で数値判定する方法をわかりやすく解説
生徒
「先生、JavaScriptで入力された値が数字かどうかを調べる方法ってありますか?」
先生
「はい、それにはisNaN関数がよく使われます。数値かどうかを判定する便利な関数ですよ。」
生徒
「isNaNってどういう意味ですか?どうやって使うんですか?」
先生
「詳しく説明しますね。まずisNaNの意味と特徴から見ていきましょう!」
1. isNaN関数とは?
isNaNは「アイ・エス・ナン」と読み、「Not a Number(ナンバーじゃない)」かどうかを調べる関数です。
つまり、渡した値が「数値として扱えないもの」かどうかを教えてくれます。
判定結果は、true(真)かfalse(偽)で返ってきます。trueなら「数値ではない」、falseなら「数値として扱える」という意味です。
2. isNaN関数の基本的な使い方
例えば、次のように使います。
console.log(isNaN("123")); // false(数字として扱える)
console.log(isNaN("abc")); // true(数字じゃない)
console.log(isNaN(45)); // false(数字)
console.log(isNaN("45abc")); // true(途中に数字以外があるので数字ではない)
文字列でも、数字の形ならfalseになりますが、文字が混じっているとtrueとなり、数値ではないと判定されます。
3. isNaNの少しややこしい特徴
実はisNaNは、渡された値を一度「数値に変換」しようとしてから判定します。そのため、少し予想と違う動きをすることもあります。
console.log(isNaN("")); // false(空文字は0とみなされる)
console.log(isNaN(" ")); // false(空白も0とみなされる)
console.log(isNaN(true)); // false(trueは1に変換される)
console.log(isNaN(false)); // false(falseは0に変換される)
これらは「数値に変換できるので、数値ではない=false」となります。
4. 数値かどうかを正しく判定するには?
はっきり「値が数値かどうか」を調べたい時は、Number.isNaN()という別の関数が使えます。こちらは「渡した値が本当にNaNかどうか」だけを判定します。
例えば:
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("abc")); // false(文字列はNaNじゃない)
console.log(Number.isNaN(123)); // false
Number.isNaN()はより厳密な判定なので、数値判定としてはこちらをおすすめします。
5. isNaNを使った実用例
たとえばユーザーが入力した値が数字かどうか確認したい時に役立ちます。
function checkInput(value) {
if (isNaN(value)) {
console.log("数字を入力してください");
} else {
console.log("入力値は数字です");
}
}
checkInput("100"); // 入力値は数字です
checkInput("abc"); // 数字を入力してください
入力のバリデーション(確認)によく使う基本的な方法です。
6. isNaNのポイントと注意点
isNaNは渡した値が数値に変換できなければtrueを返す関数- 空文字や真偽値は数値に変換されるため、
falseになる場合がある - より正確に数値かどうか判定したいときは
Number.isNaN()を使う - ユーザー入力のチェックなどに便利で、数値以外の値を検出できる
まとめ
isNaN関数で学んだ数値判定の考え方
ここまでの記事では、JavaScriptにおけるisNaN関数の基本的な使い方から、少し注意が必要な挙動、そしてNumber.isNaN()との違いまでを順番に確認してきました。
初心者の方にとって「数値かどうかを判定する」という処理は、とてもシンプルに見えて、実は落とし穴が多いポイントです。
特に、文字列として入力された数字や、空文字、真偽値などがどのように扱われるのかを理解していないと、思わぬ判定結果になってしまうことがあります。
isNaN関数は、渡された値を一度数値に変換してから判定するという特徴があります。
そのため、「数値として変換できるかどうか」を知りたい場面では非常に便利ですが、「見た目が数字かどうか」をそのまま判断したい場合には注意が必要です。
空文字や空白がfalseになる理由を理解できると、JavaScriptの型変換の仕組みも一緒に見えてきます。
入力チェックでの実践的な考え方
実際のWebアプリケーションやフォーム処理では、ユーザーが入力した値が正しい数値かどうかをチェックする場面が多くあります。
そのような場面でisNaNを使うと、「数字以外が入力されたかどうか」を簡単に判定できます。
ただし、より厳密にチェックしたい場合や、NaNそのものを扱う場合にはNumber.isNaN()を使い分けることが重要です。
次のサンプルは、入力値が本当に数値として使えるかどうかを確認する、初心者向けのシンプルな例です。
function validateNumber(input) {
if (isNaN(input)) {
console.log("数値として扱えません");
} else {
console.log("数値として使用できます");
}
}
validateNumber("250");
validateNumber("test");
このように、入力チェックの段階で数値かどうかを判定しておくことで、後続の計算処理やデータ保存の際のエラーを防ぐことができます。 JavaScript初心者の方は、「入力チェックは最初に行う」という習慣をつけておくと、プログラム全体が安定しやすくなります。
Number.isNaNを使う場面の整理
記事の中でも紹介したNumber.isNaN()は、「本当にNaNかどうか」だけを判定するための関数です。
文字列や数値に変換できる値ではtrueにならないため、より厳密なチェックが可能です。
計算結果がNaNになってしまったかどうかを調べたい場合には、こちらを使う方が安全です。
let result = 0 / 0;
if (Number.isNaN(result)) {
console.log("計算結果がNaNです");
}
このような使い分けを理解しておくことで、数値判定に関するトラブルを大幅に減らすことができます。
生徒
「最初はisNaNって名前だけで難しそうに感じていましたけど、実際は『数値として使えるかどうか』を調べているんですね」
先生
「そうですね。特にJavaScriptでは型変換が自動で行われるので、その仕組みを理解すると判定結果にも納得しやすくなります」
生徒
「空文字やtrueが数字として扱われるのは意外でした。でも理由がわかるとスッと理解できました」
先生
「そこに気づけたのはとても良いですね。入力チェックではisNaN、計算結果の確認ではNumber.isNaN、と使い分ける意識が大切です」
生徒
「これからは、数値判定をなんとなく書くのではなく、どの関数を使うべきか考えながら書いてみます」
先生
「その意識があれば、JavaScriptの基礎はしっかり身についていきますよ」