JavaScript 逆引き集 | isNaN と Number.isNaN の違い

JavaScript JavaScript
スポンサーリンク

isNaN と Number.isNaN の違い — Number.isNaN(x) 推奨

JavaScript で「値が NaN (Not a Number) かどうか」を判定する方法は2つあります。
初心者が混乱しやすいのが isNaNNumber.isNaN の違いです。


基本の違い

関数特徴判定の対象
isNaN(x)数値に変換できるかどうかをチェックするため、文字列やオブジェクトも判定対象になる広すぎて誤判定が多い
Number.isNaN(x)本当に NaN かどうかだけを判定する厳密で安全

コード例で比較

console.log(isNaN("abc"));       // true (数値に変換できない → NaN扱い)
console.log(Number.isNaN("abc")); // false (文字列は NaN ではない)

console.log(isNaN(NaN));         // true
console.log(Number.isNaN(NaN));  // true

console.log(isNaN(undefined));   // true (数値にできない → NaN扱い)
console.log(Number.isNaN(undefined)); // false (undefined は NaN ではない)
JavaScript
  • isNaN は「数値に変換できないもの」も true にしてしまう
  • Number.isNaN は「値が NaN そのものか」を判定する

よく使うテンプレート集

安全な NaN 判定

let x = NaN;
if (Number.isNaN(x)) {
  console.log("x は NaN です");
}
JavaScript

入力チェック(文字列は除外)

function safeDivide(a, b) {
  const result = a / b;
  if (Number.isNaN(result)) {
    console.log("計算できません");
    return null;
  }
  return result;
}

console.log(safeDivide(10, 0));   // Infinity
console.log(safeDivide("abc", 2)); // null (NaN判定)
JavaScript

配列の中から NaN を探す

const arr = [1, NaN, 2, "abc"];
const onlyNaN = arr.filter(Number.isNaN);
console.log(onlyNaN); // [NaN]
JavaScript

例題: ユーザー入力の数値チェック

function parseNumber(input) {
  const num = Number(input);
  if (Number.isNaN(num)) {
    console.log("数値に変換できません:", input);
    return null;
  }
  return num;
}

console.log(parseNumber("42"));   // 42
console.log(parseNumber("abc"));  // null
JavaScript
  • 効果: Number.isNaN を使うことで「文字列が NaN かどうか」を誤判定せずに済む。

実務でのコツ

  • Number.isNaN を使うのが推奨 → 判定が厳密で安全。
  • isNaN は古いコードで見かける → 文字列や undefined まで true になるので注意。
  • 数値変換チェックには Number.isNaN(Number(x)) を使うと安心。
  • 配列やデータ処理で NaN を除外するときに便利。

ありがちなハマりポイントと対策

  • isNaN("abc") === true に驚く:
    • 対策: Number.isNaN("abc") を使う。
  • undefinednull が NaN 扱いされる:
    • 対策: Number.isNaN で厳密判定。

練習問題(NaNを除外して平均を計算)

function average(arr) {
  const valid = arr.filter(x => !Number.isNaN(x));
  const sum = valid.reduce((a, b) => a + b, 0);
  return sum / valid.length;
}

console.log(average([10, NaN, 20, 30])); // → 20
JavaScript
  • 効果: NaN を除外して正しい平均を計算できる。

直感的な指針

  • isNaN = 広すぎる判定(数値にできないものも true)。
  • Number.isNaN = 本当に NaN かどうかだけ判定。
  • 実務では Number.isNaN を使うのが安全。

これを覚えれば「入力チェック」「計算結果の判定」「データ処理」で NaN を正しく扱えるようになります。

タイトルとURLをコピーしました