javascript変数の扱い

変数は、var のキーワドで用意することができます。
しかし、var のキーワドを使わなくても、適当にネーミングした名前に対して、代入することで変数が生成され初期設定できます。
では、var は何のためにあるのでしょうか? 存在理由の全てを理解してもらう説明は難しいので、1つ例を示します。
例えば 関数定義の中で、var を使わないで、代入処理を行うことができます。
(コンパイラに慣れている人からすると エラーが起きそうで、違和感があるでしょう。)
この記述の前に、その関数内で、その名前のvar を付けた宣言があれば、そのローカル変数が変更対象になります。
その名前のvar を付けた宣言が無くて、既に代入対象のグローバル変数が存在していれば、それが変更対象になります。
そうでなければ、この代入処理の時点で、グローバル変数が生成されて、代入で初期化されます。

変数の評価

上記で示したように、存在しない変数でも代入操作で変数を生成、初期化できます。
しかし存在しない変数を参照する記述は実行エラー(一般には、エラーのメッセージなしでそれ以降の記述が動作しない。)になります。
例えば、変数abcが存在しない時、if( abc == 1){ 〜 のような記述があると、それ以降の記述が動作しなくなります。

このような場合、typeof 演算子が使えます。
typeof 演算子は右辺の対象となる値のデータ型を表す文字列を返す演算子です。
この演算子は、未定義の変数名を評価でき、未定義の場合は、'undefined'を演算結果にします。
よって、、if( typeof abc == 'undefined'){ 〜 のような記述で、存在しない変数かを評価できます。

以下で、typeof 演算子がどう評価するかをまとめました。(実験できます。) 未定義
実験用ボタンalertの評価式その値補足
typeof 1.23 'number'
typeof NaN 'number'
typeof '1.23' 'string'
typeof 1.23 'boolean'
typeof null 'object'
typeof new Date() 'object'
typeof [1,2,3,] 'object' 配列
typeof document.write 'function' 関数
typeof undefined 'undefined'
最終行で、、undefinedが得られています。これはキーワードにもなっています。
undefinedは、未定義の意味ですが、変数の未設定のチェックは、undefinedのを使って行うことができます。
例えば、引数を使っているかのチェックや、存在しない配列要素かを調べる場合などで使えます。