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中几乎所有东西都是一个对象, nullundefined都是exception。

Array实例是一个对象。 所以你可以设置一个数组的属性,出于同样的原因,你不能设置一个未定义的属性,因为它不是一个对象