プロパティアクセス式が評価されると、オブジェクトプロパティの値、または、配列の要素の値になります。JavaScript には、プロパティアクセス用に次の 2つの構文が用意されています。
式.識別子
式[式]
前者の方法では、式の後に、ピリオドと識別子を記述します。式がオブジェクトを指定し、識別子がアクセスしたいプロパティの名前を指定します。後者の方法では、最初の式(オブジェクトまたは配列になる)の後に、角括弧で囲んだ式が続きます。この 2番目の式で、アクセスしたいプロパティの名前や、アクセスしたい配列要素のインデックスを指定します。以下の例をいくつか示します。
var o = {x:1,y:{z:3}};
// 例となるオブジェクト。
var a = [o,4,[5,6]];
// オブジェクトを含む配列の例。
o.x
// => 1: 式 o のプロパティ x の値。
o.y.z
// => 3: 式 o.y のプロパティ z の値。
o["x"]
// => 1: オブジェクト o のプロパティ x の値。
a[1]
// => 4: 式 a のインデックス 1 の要素の値。
a[2]["1"]
// => 6: 式 a[2] のインデックス 1 の要素の値。
a[0].x
// => 1: 式 a[0] のプロパティ x の値。
どちらのプロパティアクセス式を使っても、.
や [
の前の式がまず評価されます。評価した値が null
や undefined
になった場合、TypeError 例外がスローされます。この 2つの値は、JavaScript ではプロパティを持てないからです。値がオブジェクトでも配列でもない場合は、型変換が行われます。オブジェクト式の後に、ドットと識別子が続く場合、識別子で指定されたプロパティ名の値が検索され、この値がプロパティアクセス式全体の値となります。オブジェクト式の後に角括弧が続く場合は、2番目の式を評価し文字列に変換します。この文字列と同じ名前のプロパティの値が、プロパティアクセス式全体の値になります。どちらの場合も、指定された名前のプロパティが存在しない場合は、プロパティアクセス式の値は undefined
になります。
.
識別子構文のほうが簡単です。ただし、この形式が使えるのは、アクセスしたいプロパティの名前が識別子として正しく、また、プログラムを書くときにその名前を知っている時だけです。例えば、プロパティ名が予約語であったり、空白や句読点文字を含んでいたりする場合や、(配列などで)数値の場合は、角括弧を使って記述しなければなりません。また、プロパティ名が静的に決まるのではなく、計算結果で決まるような場合にも角括弧が使われます。