nullとundefined

実はよくわかっていなかったnullとundefined。
自分でプログラムを組む時はjavaの癖でnullの方をよく使う。けどjavascriptでヌルポが起こる時は決まって「undefined」だと怒られる。この2つの違いを実験。
・・・と思ったんですが、全く同じ実験が既にされていました。
http://d.hatena.ne.jp/cloned/20060505


どちらも特殊な型のようですね。「===」がなんだったか忘れてたけど思い出した。以下の例を見てもらえば「==」との違いが分かるはず。より厳密なチェック。

console.info('1' == 1); // true
console.info('1' === 1); // false
console.info(undefined == null); // true
console.info(undefined === null); // false

ってことでjavascriptにおいてはnullでもundefinedでも「==」使っている限りはどっちでも動くって事が分かりました。
けど両者に違いはあって、オライリーjavascript本によると、

null変数とは、定義されたが、まだ値が代入されていない状態の変数。
undefinedとは、変数は宣言されたがまだ初期化されていない状態。

です。

var hoge;
console.info(hoge === undefined); // true
console.info(hoge === null); // false

確かにhogeはundefinedだ。

余談

そうそう余談ですが、nullにちょっと期待してしまいました。

console.info(typeof null);

ってやったら「object」っていうからプロパティ持てるの!?って思って以下のようにしたらエラー。

var hoge = null;
hoge.name = 'taro';

ま、これが通っちゃうと訳が分からなくなるのでこれでいい。やっぱnullは特別なオブジェクトってことですね。