投稿者 tel | 2012年5月5日

JavaScriptの連想配列のキー

JavaScriptでオブジェクトを連想配列っぽく使おうとした場合、キーは文字列になる。

var map = {};
map['hoge'] = 'hoge_value';

そのため文字列以外のものを添え字に入れた場合、toStringが呼ばれて文字列に変換される。

var map = {},
    hoge = {};
hoge.toString = function() {
    console.log('call!');
    return 'hoge';
};
map[0] = '0_value';
map[hoge] = 'hoge_value'; // call!
for(var e in map) {
    console.log(typeof e); // string
}

そんなわけで添え字にオブジェクトを入れると全部[object Object](({}).toString()したときの文字列)になってしまって区別がつかなくなる。

var map = {},
    hoge = {'hoge': 0},
    homu = {'homu': 10};
map[hoge] = 10;
map[homu] = 20;
console.log(map[hoge]); // 20;
for(var e in map) {
    console.log(e); // [object Object]
}

JSON.stringify使えばいいかな。
ECMAScript6ではMapオブジェクトが提案されているのでそれを使えば添え字に文字列以外のものを入れることができるみたい。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Map


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。