JavaScriptのundefinedとnullは実は同じだった?

alert( undefined );

とやると「undefined」と表示される。undefinedなのかエラーなのか判り難いけれど、FirefoxJavaScriptコンソールではエラー検知されないので大丈夫な模様。そこでObjectかなと思って

alert( typeof undefined );

とやると「undefined」と表示される。

for (k in undefined) {
alert( undefined[k] );
}

とやるとうんともすんともいわない。プロパティはないのね。
ちゃんと文法的に通るし

alert( undefined == undefined );

とやると「true」っていうからオブジェクトなんだろうなとは思う。でもObjectは継承していない。上でやったことをnullでやっても同じ反応が返ってくる。
そこで

alert( undefined == null );

とやると結果は「true」だってさ。

えぇ??

でもね、でもね、

alert( typeof null );

とやると「object」というんだよ。つまり

alert( typeof null == typeof undefined );

とやると「false」という。

と、ここまで書いておきながらだけど

alert( null === undefined );

とやるとちゃんと「false」というね。型は違うけど実体は同じと判断されてるみたい。
※検証環境はIE6SP2とFirefox1.5.0.3にて。

[追記]
nullは代入不可だけどundefinedは代入可能。なので

undefined = null;
alert( null === undefined );

とやると「true」なので注意が必要。

コメントする

メールアドレスが公開されることはありません。