JavaScript - 无法设置undefined的属性

Sta*_*bie 98 javascript

我的代码:

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

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

console.debug (d);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

我正在尝试做一些类似于关联数组的事情.为什么这不起作用?

zzz*_*Bov 142

你永远不会设置d[a]任何价值.

因此,d[a]评估为undefined,并且您无法设置属性undefined.

如果你d[a] = {}事后添加d = {}应该按预期工作.

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

d[a] = {
    greetings: b,
    data: c
};
Run Code Online (Sandbox Code Playgroud)

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

d = new function () {
    this[a] = {
        greetings: b,
        data: c
    };
};
Run Code Online (Sandbox Code Playgroud)

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

d = {
  [a]: {
    greetings: b,
    data: c
  }
};
Run Code Online (Sandbox Code Playgroud)


vol*_*ron 30

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

  • d[a] = [];
  • d[a] = {};

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

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


Sha*_*bob 8

在 ES6 中,你可以使用展开运算符,如果d[a]未定义,它将忽略,但如果它有内容,它将保留它

d[a] = { ...d[a], greeting: b, data: c };
Run Code Online (Sandbox Code Playgroud)

接受的答案将覆盖 中的任何内容d,这不是我们总是想要的行为


Pol*_*878 6

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

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

console.debug(d);
Run Code Online (Sandbox Code Playgroud)

  • 最好分配一个对象:`d[a] = {};` - 使用带有非数字键的数组往往会导致问题。 (2认同)

wuk*_*ong 5

在javascript中几乎所有东西都是一个对象,null并且undefined是例外.

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


小智 5

我只是做一个简单的检查来看看 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);
Run Code Online (Sandbox Code Playgroud)