alert( undefined );
とやると「undefined」と表示される。undefinedなのかエラーなのか判り難いけれど、FirefoxのJavaScriptコンソールではエラー検知されないので大丈夫な模様。そこで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」なので注意が必要。