jquery JavaScript 配列リテラルとオブジェクトリテラル

2013年5月1日

配列リテラル

カンマ区切りの値をブラケットで括った形式で表現する。先頭の値は「0」というプロパティ名を持ち、2つ目の値は「1」、というように連続した数値のプロパティ名が付けられる。

var empty = [];
var numbers = ['zero', 'one', 'two', 'three'];

empty[1]  //undefined
numbers[1]  //'one'

empty.length  //0
numbers.length  //10

オブジェクトリテラルを使って記述した場合は、以下のようになる。但し、配列リテラルはArray.prototypeを継承して、オブジェクトリテラルはObject.prototypeを継承しているので両者には大きな違いがある。

var numbers_object = {'0': 'zero', '1': 'one', '2': 'two', '3': 'three'};

配列リテラルは配列を扱うのに便利なメソッドを継承しており、length というプロパティがあるが、オブジェクトには存在しない。

オブジェクトリテラル

2つの中括弧({})で囲まれ、その中に名前と値のペアが列挙されたもの。
{キー名:値, キー名:値,…}

JavaScript においては連想配列とオブジェクトは同一のもの。

プロパティへのアクセス

値を取得(プロパティへアクセス)するには、ドット演算子またはブラケット構文を使用する。

オブジェクト名 ドット(.)プロパティ名  image.width
連想配列としてのアクセス image[“width”]

存在しないメンバを取得しようとした場合には undefined が返される。

foo["name"]  //undefined
flight.status  //undefined

|| 演算子を使ってデフォルト値を設定できる。

var name = foo["name"] || "(none)" ;
var status = flight.status || "unknown" ;

undefinedに対して、さらにそのプロパティを取得しようとすると、TypeError 例外が投げられる。 && 演算子を利用することでそうした事態を避けることができる。

flight.equipment  //undefined
flight.equipment.model   //"TypeError"が投げられる
flight.equipment && flight.equipment.model  //undefined

ドット演算子ではプロパティ名は識別子としてみなされるので、命名規則に従っていない名前は使えないが、ブラケット構文ではプロパティ名は文字列として指定するのでそのような制限はない。

また、識別子はデータ型ではないので、プログラムにそのまま記述しなければならず、プログラムで操作することはできないが、[]演算子を使ってプロパティを表現する場合、名前は文字列なので(文字列はデータ型)、プログラムで操作可能。


var addresses = “”;
for(i = 0; i < 3; i++){ addresses += location["address" + i]+ "\n"; } [/code]