end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

jQuery.json.jsによるhash objectのjson化で、ややはまった

javascriptでは、array ≒ hash と信じていました。

しかし、次のように書いた場合、hashのvalueは取得できるものの、jQuery.json.jsでjson化すると、null listなjsonしかできません。

    var hash = new Array();
    hash['KEY_A'] = 'VAL_A';
    hash['KEY_B'] = 'VAL_B';
    hash['KEY_C'] = 'VAL_C';
    alert( hash['KEY_C'] );
    alert( typeof(hash) +':'+ $.toJSON(hash) );
    //-> object:[]  ????なぜ、null list?

なので、new Array() を new Object() にして対処しました。

    var hash_obj = new Object();
    hash_obj['KEY_A'] = 'VAL_A';
    hash_obj['KEY_B'] = 'VAL_B';
    hash_obj['KEY_C'] = 'VAL_C';
    alert( typeof(hash_obj) +'->'+ $.toJSON(hash_obj) );
    //-> object->{"KEY_A":"VAL_A","KEY_B":"VAL_B","KEY_C":"VAL_C"}
    //なので、hashのjson化は↑こうした方が良さそう

new Array() も new Object() も typeof == 'object' なのになぜ?
普段、jqueryに任せっきりなので、この辺りは未だに理解していません。

以下は参考です。

    var array = new Array();
    array.push('A');
    array.push('B');
    array.push('C');
    alert( typeof(array) +':'+ $.toJSON(array) );
    //-> object:["A","B","C"]  予想通り

    var hash = new Array();
    hash['KEY_A'] = 'VAL_A';
    hash['KEY_B'] = 'VAL_B';
    hash['KEY_C'] = 'VAL_C';
    
    alert( hash['KEY_C'] );
    alert( typeof(hash) +':'+ $.toJSON(hash) );
    //-> object:[]  ????なぜ、null list?

    var hash_obj = new Object();
    hash_obj['KEY_A'] = 'VAL_A';
    hash_obj['KEY_B'] = 'VAL_B';
    hash_obj['KEY_C'] = 'VAL_C';
    alert( typeof(hash_obj) +'->'+ $.toJSON(hash_obj) );
    //-> object->{"KEY_A":"VAL_A","KEY_B":"VAL_B","KEY_C":"VAL_C"}
    //なので、hashのjson化は↑こうした方が良さそう