JavaScript – 不能设置undefined的属性
我的代码:
var a = "1", b = "hello", c = { "100" : "some important data" }, d = {}; d[a]["greeting"] = b; d[a]["data"] = c; console.debug (d);
我得到以下错误:
Uncaught TypeError:无法设置未定义的属性“问候”。
我正在尝试做类似于关联数组的东西。 为什么这不起作用?
你从来没有把d[a]
设置为任何值。
正因为如此, d[a]
计算结果是undefined
,您不能在undefined
上设置属性。
如果在d = {}
之后立即添加d[a] = {}
,事情应该按预期工作。
或者,您可以使用对象初始值设定项:
d[a] = { greetings: b, data: c };
或者你可以在一个匿名函数实例中设置d
所有属性:
d = new function () { this[a] = { greetings: b, data: c }; };
如果您处于支持ES2015function的环境中,则可以使用计算属性名称 :
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
都是exception。
Array
实例是一个对象。 所以你可以设置一个数组的属性,出于同样的原因,你不能设置一个未定义的属性,因为它不是一个对象