JavaScriptで数値計算を行う際、`NaN`(Not a Number)が発生するケースは少なくありません。この記事では、`isNaN()`関数の使い方と注意点について、実例を交えて解説します。
isNaN()関数とは
`isNaN()`は、与えられた値が`NaN`であるかどうかを判定するJavaScriptのグローバル関数です。戻り値は真偽値(`true`または`false`)となります。
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false基本的な使い方
// 数値の場合
console.log(isNaN(123)); // false
console.log(isNaN(-1.23)); // false
// 文字列の場合
console.log(isNaN("abc")); // true
console.log(isNaN("123")); // false(数値に変換可能)
// 計算結果の確認
console.log(isNaN(0/0)); // true
console.log(isNaN(100/"abc")); // true注意点と制限事項
1. 暗黙的な型変換
`isNaN()`は引数を数値に変換してから判定を行うため、予期せぬ結果となることがあります。
console.log(isNaN("")); // false(空文字は0に変換)
console.log(isNaN(" ")); // false(空白文字も0に変換)
console.log(isNaN(true)); // false(trueは1に変換)2. より厳密な判定方法
ES6以降では、より厳密な判定が必要な場合、`Number.isNaN()`の使用を推奨します。
// Number.isNaN()の場合
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("NaN")); // false
console.log(Number.isNaN(undefined)); // false
// グローバルisNaN()との比較
console.log(isNaN("NaN")); // true
console.log(isNaN(undefined)); // true実践的な使用例
1. 数値計算の事前チェック
function divide(a, b) {
if (isNaN(a) || isNaN(b)) {
return "有効な数値を入力してください";
}
return b !== 0 ? a / b : "0で除算はできません";
}
console.log(divide(10, 2)); // 5
console.log(divide("abc", 2)); // "有効な数値を入力してください"2. フォーム入力の検証
function validateNumericInput(value) {
if (isNaN(value)) {
return "数値を入力してください";
}
return "入力値は有効です";
}
console.log(validateNumericInput("123")); // "入力値は有効です"
console.log(validateNumericInput("abc")); // "数値を入力してください"ベストプラクティス
1. 数値の厳密な判定には`Number.isNaN()`を使用する
2. 型変換の影響を考慮する
3. エラーハンドリングと組み合わせて使用する
まとめ
`isNaN()`関数は、JavaScriptで数値計算やフォーム入力の検証など、様々な場面で活用できる重要な関数です。ただし、暗黙的な型変換の挙動に注意が必要で、より厳密な判定が必要な場合は`Number.isNaN()`の使用を検討しましょう。
適切な使用により、より堅牢なアプリケーション開発が可能となります。