JavaScript - 无法设置undefined的属性

我的代码:

var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};

d[a]["greeting"] = b;
d[a]["data"] = c;

console.debug (d);

我收到以下错误:

未捕获的TypeError:无法设置属性' greeting' 未定义的。

我尝试做类似于关联数组的事情。 为什么这不起作用?

StackOverflowNewbie asked 2019-08-13T16:37:00Z
5个解决方案
134 votes

您永远不会将d[a]设置为任何值。

因此,d的计算结果为d = {},您无法在undefined上设置属性。

如果你在d = {}之后添加d,事情应该按预期工作。

或者,您可以使用对象初始值设定项:

d[a] = {
    greetings: b,
    data: c
};

或者,您可以在匿名函数实例中设置d的所有属性:

d = new function () {
    this[a] = {
        greetings: b,
        data: c
    };
};

如果您处于支持ES2015功能的环境中,则可以使用计算属性名称:

d = {
  [a]: {
    greetings: b,
    data: c
  }
};
zzzzBov answered 2019-08-13T16:37:51Z
28 votes

您必须将d[a] == undefined设置为关联数组或对象:

  • d[a] == undefined
  • d[a] == undefined

没有设置,这就是发生的事情:

d[a] == undefined,所以你正在做undefined['greeting']=b;,根据定义,undefined没有属性。 因此,您收到的错误。

vol7ron answered 2019-08-13T16:38:41Z
6 votes

存储在d[a]的对象尚未设置为任何内容。 因此,d[a]的评估结果为undefined.您无法将属性分配给undefined :)。 您需要将对象或数组分配给d[a]

d[a] = [];
d[a]["greeting"] = b;

console.debug(d);
Polaris878 answered 2019-08-13T16:39:09Z
5 votes

在javascript几乎一切都是对象,Arrayundefined是例外。

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

wukong answered 2019-08-13T16:39:45Z
3 votes

我只是做一个简单的检查,看看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);
iohzrd answered 2019-08-13T16:40:15Z
translate from https://stackoverflow.com:/questions/7479520/javascript-cannot-set-property-of-undefined