JavaScript

オブジェクトと配列の初期化子

 オブジェクトと配列の初期化子は、新たに生成されるオブジェクトや配列の値となる式のことです。このような初期化子は、「オブジェクトリテラル」や「配列リテラル」と呼ばれることがあります。しかし、本当のリテラルとは異なり、単項式ではありません。なぜなら、プロパティ値や、要素の値を指定するために、複数の式が含まれるからです。配列の初期化子のほうがいくぶん単純ですので、こちらから説明することにします。

 配列初期化子は、カンマで区切った式のリストを角括弧で囲んだものです。配列初期化子の値は、新たに生成された配列になります。この配列の要素は、カンマで区切られた式の値に初期化されます。例を示します。

[]
// 空の配列。角括弧中に式がない場合、要素がないことを意味する。

[1+2,3+4]
// 要素を 2つ持つ配列。最初の要素が 3 に、2つ目の要素が 7 になる。

 配列初期化子中の要素の式として、配列初期化子を記述しても構いません。この場合、入れ子になった配列が生成されます。

var matrix = [[1,2,3],[4,5,6],[7,8,9]];

 配列初期化子が評価されるたびに、配列初期化子中の要素の式も評価されます。つまり、配列初期化子の値は、評価されるたびに異なる可能性があります。

 未定義の要素を配列リテラル中に含めたい場合は、カンマの間の値を省略してください。例えば、次の例の配列は、要素を 5つ持ちますが、うち 3つの要素は未定義の要素になります。

var sparseArray = [1,,,,5];

 配列初期化子の最後の式の後にカンマを 1つ記述しても構いません。この場合は、未定義要素は作成されません。

 オブジェクト初期化子は、配列初期化子と同じような書式ですが、角括弧の代わりに中括弧を使い、各式の前にはプロパティ名とコロンを記述します。例を示します。

var p = { x:2.3, y:-1.2 };
// 2つのプロパティを持つオブジェクト。

var q = {};
// プロパティを持たない空のオブジェクト。

q.x = 2.3; q.y = -1.2;
// これで、q は p と同じプロパティを持つ。

 オブジェクトリテラルは、次の例のように入れ子にできます。

var rectangle = { upperLeft: { x: 2; y: 2}, lowerRight: {x: 4, y: 5 } };

 オブジェクト初期化子(オブジェクトリテラル)と配列初期化子(配列リテラル)については、それぞれ別ページにて説明予定です。