我的代码:
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);
我收到以下错误:
未捕获的类型错误:无法设置未定义的属性“问候语”。
我正在尝试做一些类似于关联数组的事情。为什么这不起作用?
我的代码:
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);
我收到以下错误:
未捕获的类型错误:无法设置未定义的属性“问候语”。
我正在尝试做一些类似于关联数组的事情。为什么这不起作用?
您从未设置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
}
};
您必须设置d[a]
为关联数组或对象:
d[a] = [];
d[a] = {};
没有设置,这就是正在发生的事情:
d[a] == undefined
,所以你正在做undefined['greeting']=b;
,根据定义, undefined 没有属性。因此,您收到了错误。
存储在的对象d[a]
尚未设置为任何内容。因此,d[a]
评估为undefined
。您不能将属性分配给undefined
:)。您需要将一个对象或数组分配给d[a]
:
d[a] = [];
d[a]["greeting"] = b;
console.debug(d);
在JavaScript几乎一切都是对象,null
并且undefined
是例外。
实例Array
是一个对象。所以你可以设置数组的属性,出于同样的原因,你不能设置未定义的属性,因为它不是一个对象
我只是做一个简单的检查,看看 d[a] 是否存在,如果没有初始化它......
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
if (d[a] === undefined) {
d[a] = {}
};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);