JavaScriptにはnullundefinedと、立場が似たものがあるわけですが、さらにこのundefinedにも二種類あるよってお話です。

「本当に無い」のと「「無い」がある」のと

値がundefinedであるときは、文字通り「未定義」である場合と、「未定義という値」である場合とがあります。

var obj = { a: undefined };

console.log(obj.x);  // => undefined(定義されていないプロパティ)
console.log(obj.a);  // => undefined(未定義という値)

二種類のundefinedの見分け方

(さらに…)