私のコード:
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);
次のエラーが発生します:
キャッチされない TypeError: 未定義のプロパティ 'greeting' を設定できません。
連想配列に似たことをやろうとしています。なぜうまくいかないのでしょうか?
ベストアンサー1
d[a]
いかなる値にも設定されません。
このため、d[a]
は と評価されundefined
、 にプロパティを設定することはできませんundefined
。
d[a] = {}
直後に追加すると、d = {}
期待どおりに動作するはずです。
あるいは、オブジェクト初期化子を使用することもできます。
d[a] = {
greetings: b,
data: c
};
d
または、匿名関数インスタンスでのすべてのプロパティを設定することもできます。
d = new function () {
this[a] = {
greetings: b,
data: c
};
};
ES2015の機能をサポートする環境であれば、計算されたプロパティ名:
d = {
[a]: {
greetings: b,
data: c
}
};