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()`の使用を検討しましょう。

適切な使用により、より堅牢なアプリケーション開発が可能となります。