Hatena::Groupmnemonic

きおく屋めがねばし

 | 

2013-04-01

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

Object and Array Initializers

オブジェクトと配列初期化子は、新たに生成されるオブジェクトや配列の値となる式のことです。

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

[]         // 空の配列。角括弧中に式がない場合、要素がないことを意味する
[1+2,3+4]  // 要素を 2 つ持つ配列。最初の要素が 3 に、2 つ目の要素が 7 になる。

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

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

The element expressions in an array initializer are evaluated each time the array initializer is evaluated. This means that the value of an array initializer expression may be different each time it is evaluated.

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

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

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


A single trailing comma is allowed after the last expression in an array initializer and does not create an undefined element.

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

var p = { x:2.3, y:-1.2 };  // 2 つのプロパティを持つオブジェクト。
var q = {};                 // プロパティを持たない空のオブジェクト。
q.x = 2.3; q.y = -1.2;      // これで、q は p と同じプロパティを持つ。

Object literals can be nested. For example:

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

オブジェクト初期化子が評価されるたびに、オブジェクト初期化子の中の式も評価されます。この式には、定数だけでなく、任意の JavaScript 式が記述できます。また、オブジェクトリテラルのプロパティ名は識別子でなく文字列です。プロパティ名として予約語が使えたり、識別子として適切ではない文字列も使えたりするので、この仕様は便利です。

var side = 1;
var square = { "upperLeft":  { x: p.x, y: p.y },
               'lowerRight': { x: p.x + side, y: p.y + side }};

The expressions in an object initializer are evaluated each time the object initializer is evaluated, and they need not have constant values: they can be arbitrary JavaScript expressions. Also, the property names in object literals may be strings rather than identifiers (this is useful to specify property names that are reserved words or are otherwise not legal identifiers):


トラックバック - http://mnemonic.g.hatena.ne.jp/paragramma/20130401
 |