Javascriptで知っておくべき知識 > 配列とオブジェクトと連想配列
2006年09月21日
配列とオブジェクトの略式(前提知識)
配列型(Array)とオブジェクト型(Object)のオブジェクト作成は通常書く場合、
var array = new Array();
var object = new Object();
※宣言時の ( ) は省略できますが、「Ajax専」では付ける方向で統一します。
と記述しますが、これには略式があり
var array = [];
var object = {};
このように記述することができます。
配列(Array型)(確認事項)
配列で初期値の宣言をするときは、
var array = ['A','B','C'];
このように記述します。そうすると、
alert('value->'+array[0]); // value->A
alert('value->'+array[1]); // value->B
alert('value->'+array[2]); // value->C
alert('length->'+array.length); // length->3
となります。また、配列に追加する場合には、
array.push('D');
alert('value->'+array[3]); // value->D
alert('length->'+array.length); // length->4
となります。更にループさせると、
for (var i = 0; i < array.length; i++){
alert('value->'+array[i]);
}
ここはまだまだ序盤。
オブジェクト(Object型)(確認事項)
同様にオブジェクトで初期値の宣言をするときは、
var object = {a:'A',b:'B',c:'C'};
このように記述します。そうすると、
alert('value->'+object.a); // value->A
alert('value->'+object.b); // value->B
alert('value->'+object.c); // value->C
となります。同様に追加する場合は、
object.d = 'D';
alert('value->'+object.d); // value->D
となります。更にループさせると、
for (var i in object){
alert(object[i]);// iにはa,b,c,dが入っている
}
さて、ここまでで基本的な確認事項は終わりです。
連想配列(重要)
ここからが本題。連想配列と言えば、
human['name']
こんな感じで記述できるのが連想配列です。さて、この連想配列はArray型?Object型?
実はArray型で宣言してもエラーが出るわけではないので気づきにくいですが、Object型が正解です。というよりもそもそも連想配列なんてものはJavascriptには存在しません。
上記の例を別の記述に変えると分かりやすいですが、
human.name
となります。もうそのままObject型ですね。オブジェクトの説明の例を別の書き方にすると、
var object = {a:'A',b:'B',c:'C'};
object['d'] = 'D';
このように記述できるわけです。ここで、「あれ?Array型と似てるな」と思った人は鋭い人です。Array型の簡易実装を記述すると、
var array = {0:'A',1:'B',2:'C'}
array[3] = 'D';
alert('value->'+array[0]); // value->A
alert('value->'+array[1]); // value->B
alert('value->'+array[2]); // value->C
alert('value->'+array[3]); // value->D
このような記述もできます。このObjectにlengthやpush、sort等のメソッドを追加したのがArray型になります。pushメソッドは、最後尾に挿入すると同時にlengthに+1している訳です。ただし、名前に制約がある(変数で付けられる名称以外は不可)ので
array.0
のようなアクセスは許されません。逆にいうと [ ] を用いた記述の場合、
var object = [];
object['漢字'] = 'A';
alert(object['漢字']);
このような記述は可能となります。つまり、Array型はもちろんObject型も全て連想配列的な記述に変換することが可能です。これは色々応用できる知識です。
まとめ
何故このようなエントリーをしたかというと、prototype.jsではArray型はprototype宣言で拡張されており、連想配列だからといってArray型で宣言してしまうと、for-inループした際ひどいことになるからです。
とはいえ、利便性のため、「Ajax専」ではobject[name]のような記述は連想配列と呼びます。
【トラックバック】
このエントリーのトラックバックURL: