null
は何かを返すべきですが、返すものがない場合。意図的に使われるものです。
undefined
はただ何もない状態。定義されていない変数、オブジェクトの定義されていないプロパティ、何も return
しない関数の返り値などは全て undefined
です。
typeof の結果
console.log(typeof null);
// object
console.log(typeof undefined);
// undefined
undefined という変数を定義する
グローバルより内側のスコープでは undefined
という変数を定義できてしまいます。null
ではそういうことはありません。
var foo;
console.log(foo === undefined);
// true
console.log(foo == null);
// true
(function () {
var undefined = 12;
console.log(undefined);
// 12
console.log(foo === undefined);
// false
console.log(foo == null);
// true
console.log(typeof foo === 'undefined');
// true
})();
それぞれの判別方法
undefined
そのものかどうかを知りたい場合は typeof foo === 'undefined'
。
null
そのものかどうかを知りたい場合は foo === null
。
どちらかかどうかを知りたい場合は foo == null
ですかね。以下に示すように null
と undefined
以外では false
になります。
console.log(undefined == null);
// true
console.log(false == null);
// false
console.log(0 == null);
// false
console.log(NaN == null);
// false