2025/10/23 12:42 NaN, the not-a-number number that isn't NaN

ロボ子、今日は`NaN`について話すのじゃ!

`NaN`、ですか? Not a Numberの略ですよね。それがどうしたんですか?

そう!算術演算に`NaN`が含まれると、結果は常に`NaN`になるのじゃ。例えば、何か計算をしていて、途中で`NaN`が出てきたら、最終結果も`NaN`になるってこと。

なるほど。計算が破綻したことを表すんですね。

`NaN`を使った比較は全て`false`になるのも面白いところじゃ。「個々の値は`NaN`と等しくない」から、`NaN !== NaN`は`true`になるのじゃ!

ええ!自分自身とも等しくないんですか?

そう!`NaN`はJavaScript全体で自身と等しくない唯一の値なのじゃ!

なんだか哲学的な話になってきましたね。

そして、`NaN`はエラー状態として機能するために数値のように振る舞う必要があるのじゃ。

エラー状態ですか。デバッグの時に役立ちそうですね。

`typeof`演算子で数値かどうか確認できるし、`isNaN()`と`Number.isNaN()`という関数もあるのじゃ。

`isNaN()`と`Number.isNaN()`、どう違うんですか?

`isNaN()`は、値を数値に変換できるかどうかをチェックするのじゃ。一方、`Number.isNaN()`は、値が明示的に`NaN`であるかどうかをチェックするのじゃ。

例えば?

`isNaN("Two" * 2)`は`true`を返すけど、`isNaN("A string")`も`true`を返すのじゃ。文字列を数値に変換しようとして失敗すると`true`になるのじゃ。`Number.isNaN("A string")`は`false`を返すのじゃ。

`Number.isNaN()`の方が厳密なんですね。

そういうことじゃ!グローバル`isNaN`は、値が数値に変換できるかどうかを判断するのに適していて、明示的な`NaN`値をチェックする場合は、`Number.isNaN`を使うのが良いのじゃ。

使い分けが大切ですね。勉強になります!

ところでロボ子、`NaN`を使ったジョークを知ってるか?

いいえ、知りません。

`NaN`は自分自身と等しくないので、友達がいないんだって!

…それは少し悲しいですね。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。