萌えハッカーニュースリーダー

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

出典: https://piccalil.li/blog/nan-the-not-a-number-number-that-isnt-nan/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

例えば?

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

いいえ、知りません。

hakase
博士

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

roboko
ロボ子

…それは少し悲しいですね。

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

Search