JavaScriptなお話。
配列のインスタンスを生成するとき、
var ary = new Array():
もしくは
var ary = []:
って書く。
初期化も同時にしたいときには、
var ary = ['A','B','C'];
って書く。
中身を設定したいときには、
ary.push('D');
って書く。
で、中身をイテレートする時には、
for (var i = 0; i < ary.length; i++){ alert(ary[i]); }
ってな風になる。
var obj = new Object():
もしくは
var obj = {}:
って書く。
初期化も同時にしたいときには、
var obj = [a : 'A', b : 'B', c : 'C'];
って書く。
中身を設定したいときには、
obj.d = 'D'; obj['e'] = 'E';
って書く。
で、中身をイテレートする時には、
for (var key in obj){ alert(obj[key]); }
ってな風になる。
特に問題はない。
が、こんなこともできる。
var ary = new Array(): ary['a'] = 'A';
これはいったい何者なんだろう。
配列?連想配列?
どちらも正解のようなそうでもないような…。
というかJavaScriptには連想配列なんていうものはない。
そんな感じの動きをするから、そんな感じの名前なだけ。
要するに連想配列っていうのは、そのObjectのプロパティに値を詰めたり出したりしているだけ。
ArrayもObjectの一種だからプロパティに設定はできるよってこと。
じゃあ区別しなくていいのかというと、そういうわけじゃない。
具体的には、Arrayにはlengthがあるけど、Objectにはない。
jQueryのeachのように、配列でも連想配列でもイテレートできるような関数を使うとはまる。
var obj = {}; obj["a"] = "A"; $.each(obj, function(key, val){ alert(key + ":" + val); }
はOKだけど、
var ary = []; obj["a"] = "A"; $.each(ary, function(idx, val){ alert(idx + ":" + val); }
はうまくいかない。