定義上、値にnull
もundefined
値にもプロパティはなく、プロパティを追加することもできません。
これはnullについてうまく要約されています:
オブジェクト値が意図的に存在しないことを表すプリミティブ値。
同様に、未定義の場合:
変数に値が割り当てられていない場合に使用されるプリミティブ値。
(null
はNullタイプundefined
の唯一の値であり、Undefinedタイプの唯一の値です。)
さて、実装グッズについては:
これらのタイプは両方ともプリミティブを表し、「primitiveValue.Property」の動作は内部のToObjectメソッドによってカバーされます。(うさぎの穴の始まりについては、GetValue / PutValueを参照してください。)
9.9から:ToObject:
抽象操作ToObjectは、その引数を..に従ってObject型の値に変換します。
- Undefined=>TypeError例外をスローします。
- Null=> TypeError例外をスローします。
- (等々)
コメントに関しては、11.4.3:typeOf演算子:を参照してください。
に従ってType(val)によって決定された文字列を返します。