変数
アプリケーションで値を識別する名前として変数を使用します。変数の名前はあるルールに従って付けなくてはなりません。変数の名前は識別子とも呼ばれます。
JavaScript の識別子は必ずアルファベットかアンダースコア (_) かドル記号 ($) から始まらなくてはなりません。続く文字は数字 (0-9) も使えます。JavaScript は大文字・小文字を区別するため、使えるアルファベットは "A" から "Z"(大文字)と "a" から "z"(小文字)です。
JavaScript 1.5 からは å や ü といった ISO 8859-1 や Unicode のアルファベットも識別子に使えます。Unicode エスケープシーケンス のページに列挙されている \uXXXX 形式の Unicode エスケープシーケンスも識別子に使用できます。
Number_hits
や temp99
や _name
が使用できる名前の例です。
変数の宣言
2 つの方法で変数を宣言できます。
- var というキーワードを使う。例えば、
var x = 42
。この構文は ローカルおよびグローバル 変数どちらの宣言にも使用可能です。 - 単に値を代入する。例えば、
x = 42
。これはいつでも グローバル変数 を宣言できますが、厳格な JavaScript 警告 (strict JavaScript warning)が発生します。この方法は使用すべきではありません。
変数の評価
var
文を使用し、初期化せずに宣言された変数は undefined の値をとります。
未宣言の変数にアクセスしようとすると、ReferenceError 例外が投げられます。
var a; print("a の値は " + a); // "a の値は undefined" を出力 print("b の値は " + b); // ReferenceError 例外を投げる
undefined
を使うと変数に値が入っているかどうかを確かめられます。以下のコードでは、変数 input
には値が代入されておらず、if
文での評価結果は true
です。
var input; if(input === undefined){ doThis(); } else { doThat(); }
Not sure how the following is related to "Variables" section undefined
は真偽値コンテキストで使用されると false
として振る舞います。例えば以下のコードでは、myArray
の要素が未定義であるために関数 myFunction
が実行されます。
var myArray = new Array(); if (!myArray[0]) myFunction();
null 変数を評価すると、数値コンテキストにおいては null 値は 0 として振る舞います。また、真偽値コンテキストでは false として振る舞います。
var n = null; print(n * 32); // prints 0
変数のスコープ
変数を関数の外側で宣言すると、その変数はその文書のどのコードからも使用できるようになるため、グローバル(大域)変数と呼ばれます。変数を関数の内部で宣言すると、その変数はその関数の中でしか使用できないため、ローカル(局所)変数と呼ばれます。
JavaScript には ブロック文 のスコープがありません。むしろ、そのブロックを内包しているコードに対して局所化されます。例えば以下のコードは condition
が false
のとき、例外を投げずに 0 が出力されます。
if (condition) { var x = 5; } print(x ? x : 0);
JavaScript の変数に関する独特なこととして、後に宣言される変数を例外を発生させることなく参照できるというのも挙げられます。
print(x === undefined); // "true" を出力 var x = 3;
グローバル変数
need links to pages discussing scope chains and the global object グローバル変数は実際にはグローバルオブジェクトのプロパティです。ウェブページではグローバルオブジェクトは window です。そのため、window.variable
という構文を使うことでグローバル変数をセットしたり、グローバル変数にアクセスしたりすることができます。
したがって、あるウィンドウやフレームで宣言したグローバル変数に、そのウィンドウやフレームの名前を指定すれば別のウィンドウやフレームからアクセスできます。例えば、phoneNumber
という変数を FRAMESET
文書内で宣言すると、子フレームから parent.phoneNumber
としてこの変数を参照することができます。