1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NaNを上書きできたと思ったら勘違いだった話

1
Posted at

JavaScriptのNaNを上書きできたと思ったら勘違いだった話

はじめに

JavaScriptで以下のコードを書いたとき、

const NaN = 10;
console.log(NaN);

「え、NaNって上書きできるの?」と思いました。

しかし結論から言うと、これは勘違いでした。


何が起きていたのか

このコードはエラーではなく、普通に動きます。

const NaN = 10;
console.log(NaN); // 10

理由はシンプルで、

これはグローバルのNaNを書き換えているのではなく、ただのローカル変数定義だから


グローバルのNaNとは別物

JavaScriptには最初から NaN という値が存在します。

typeof NaN // "number"
NaN === NaN // false

これは「数値計算が失敗した結果」を表す特殊な値です。


混乱の原因

今回のポイントはスコープでした。

const NaN = 10;

このNaNは:

  • グローバルのNaNではない
  • ただの変数名
  • スコープ内でグローバルより優先される

つまり「同じ名前の別人」です。


本物のNaNは書き換えできない

NaN = 123; // ❌ エラーまたは無効

または

const NaN = 123; // ❌ 再宣言エラー

まとめ

  • NaNは予約語ではない
  • しかしグローバルのNaNは書き換え不可
  • const NaN = 10 はローカル変数として動いているだけ
  • JavaScriptは「同名でも別物になるスコープ言語」

学び

今回の件で重要だったのはNaNそのものではなく、

「グローバル変数とローカル変数のスコープの違い」

でした。


🎯 一言まとめ

NaNは壊れてるのではなく、
「勘違いされやすいだけでちゃんとルール通り動いている」

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?