2010/04/15

[JavaScript]JSONのアクセスについて

まずは、JSONのキーのアクセスについて。

var hoge = {
"Sample1":"1"
, "Sample2":"2"
};
for(i in hoge){
alert(i);
}

実行結果は、Sample1、Sample2と順に表示されます。

では次にアクセス方法について、
var hoge = {
"Sample1":"1"
, "Sample2":"2"
};
for(i in hoge){
alert(hoge[i]);
}

実行結果は、1、2と順に表示されます。

理由はわからないのですが、なぜ、hoge.lengthで長さを取得することができないのか?

hoge.lengthを表示すると、undefinedが返されます。

valueが配列の場合は、当然、lengthを取得することができるんだけど。

var hoge2 = {
"Sample3" :["apple","orange"]
};

//「2」が返ってくる
alert(hoge2["Sample3"].length);

var hoge3 = hoge2["Sample3"];

for(var i=0;i<hoge3.length;i++){
alert(hoge3[i]);
}

var hoge2 = {
"Sample3" :[
{"title":"apple","img":"orange"}
, {"title":"lemon","img":"banana"}
]
};

var hoge3 = hoge2["Sample3"];
for(var i=0;i<hoge3.length;i++){
//2回ループが回り、一度目は、「apple」が表示され、
//二度目は、「lemon」が表示される。
alert(hoge3[i]["title"]);
}

うーん、なぞ。

1 件のコメント:

  1. lengthは配列の数を取得するプロパティだからねぇ。

    連想配列は配列と名前はついているけども
    JavaScriptのオブジェクトは全部連想配列で出来ているようなもんで・・・

    例えば、

    document.[DOMのID].~

    ↑こんな感じでIDを指定してDOMにアクセスできるけど、これって

    document = {[DOMのID], DOMオブジェクト}

    上記のような連想配列って解釈もできるよね。
    でもdocument.lengthでdocument配下全てのオブジェクトの個数はもちろん取得できない訳です。

    JavaScriptでは、"配列"は配列プロトタイプを継承したオブジェクトで、"連想配列"はただのKeyを指定する事でオブジェクトを返してくれるマッピング・・・みたいなイメージでいんじゃないかな?

    なんか変な所あったらよろしく。


    しかし久しぶりに(コードと言えるもんでもないが)コードを書いた。
    開発したいよー><

    返信削除