
未定義のグローバル変数やグローバル関数を呼び出したときに、エラーになるのではなくて、undefinedを得る方法をメモしておきます。確実にundefinedを得ることができれば、簡単に条件分岐を書くことができます。問題/解答形式にしてみましたので是非挑戦ください。
問い
以下のJavaScriptをconsole *1で実行したとき、どのような結果が返されますか。ただし、問題中のwindowはグローバルオブジェクトのWindowオブジェクトを表します(標準で定義されています)。
(1) var a が未定義のとき, a;
(2) var b = {} のとき, b.c;
(3) var a が未定義のとき, window.a;
答え
(1) ReferenceError: a is not defined (2) undefined (3) undefined

よってグローバル変数を正しくundefined判定するためには、(3)のようにwindow.をつけて呼び出せばよいことがわかります。
まとめ
「未定義でない変数やオブジェクト」を「ブラウザが知っているもの」と表すことにして自己流にまとめると、実行する式と結果の組み合わせは、
ブラウザが知っているもの.ブラウザが知らないもの→ undefined(いきなり)ブラウザが知らないもの→ エラー
となる。