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实例是一个对象。 所以你可以设置一个数组的属性,出于同样的原因,你不能设置一个未定义的属性,因为它不是一个对象