#daiizメモ

Scrapboxに夢中

JavaScriptでしっかり undefined を得る

f:id:daiiz:20140827220326p:plain

未定義のグローバル変数やグローバル関数を呼び出したときに、エラーになるのではなくて、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

f:id:daiiz:20140827215734p:plain

consoleで実行した結果

よってグローバル変数を正しくundefined判定するためには、(3)のようにwindow.をつけて呼び出せばよいことがわかります。

まとめ

「未定義でない変数やオブジェクト」を「ブラウザが知っているもの」と表すことにして自己流にまとめると、実行する式と結果の組み合わせは、

  • ブラウザが知っているもの.ブラウザが知らないもの → undefined
  • (いきなり)ブラウザが知らないもの → エラー

となる。

*1:console は chrome をお使いの場合、「Ctrl + Shift + I」キーで開くことができます。