残りの 2 つのプリミティブ値は、undefinednull だ。
これらはよく混同されるので注意が必要である。

undefined は変数(プロパティ)の既定値であり、
存在しないプロパティを参照した際に返される値でもある。

null は、用途は Java や C# と同じで、
空のオブジェクト参照を表すために使われる。

まあ、これくらいは基本だろうから、
これらの値をさらに詳しく考えてみよう。

JavaScript では、変数や戻り値は型を持たず、
常に値そのものが型(実行時型)を持っている。
undefinednull も例外ではなく、それぞれ型が存在する。

それは、Null 型と Undefined 型だ。
これが、残りの 2 つのプリミティブ型である。

まず、undefined の型は、Undefined である。
この型の取る値は undefined ただ一つであるため、
この型はシングルトンであるとも言える。

ただ、驚くべきことに、undefined はリテラルではない。
これはグローバルオブジェクトのプロパティであり、
JavaScript 1.x 系では、その値が変更可能となっている。

なので、undefined = 0 等として値を変更してしまうと、
undefined を使う他のスクリプトに、
大きな影響を与える可能性があるので注意が必要だ。

確実性を追及するならば、void 演算子を使うことで、
常に Undefined 型の唯一の値を得ることができる。

次に、null の型は、Null である。
この型の取る値は null ただ一つであるため、
この型も Undefined 同様シングルトンであると言える。

nullundefined と違いリテラルなので、
こちらは安心して使うことが可能だ。