定義(var)していない変数の状態
定義(var)したが値を代入していない変数の状態
typeofによる変数の状態の判定


Javascriptでは変数の状態として通常の値が格納された状態以外に"null"と、"undefined"がある。
(Javascriptの本を見ると初期化していない変数を“定義していない変数”と書いているがこれはちょっと違和感があるので、 ここでは“使用する以前に明示的に宣言されていない変数”と、“宣言はされているが初期化されていない変数”を明確に 区別して記述することとする。)

通常宣言されていない変数を参照しようとするとJavascriptはエラーとなり処理は先に進まない。たとえ、同値演算子(===)を 使っても結果は同じでエラーになり処理は先に進まない。
そこで typeof を使用して"undefined"(という文字列)と比較する。typeofならエラーにならず変数の状態が確認できる。
typeof を使うことによってundefinedと、nullの判別も可能となる。
初期化されているか否かを判別したいだけであればnullと比較することで可能であるが、undefinedな変数(わざと初期化 していない変数)と比較した方がベターであろう。