如何使用['key']表示法向对象添加属性?

Jea*_*ach 1 javascript

JavaScript文档声明,为了向现有对象添加属性,您可以执行以下操作.

data["property"] = value;
Run Code Online (Sandbox Code Playgroud)

要么

data.property = value;
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我试图在添加之前将我的模型ID(由服务器接收)转换为字符串,例如:

data.model[id.toString()] = false;
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Uncaught TypeError: Cannot set property '1' of undefined
Run Code Online (Sandbox Code Playgroud)

我最初虽然这是因为你不能使用字母数字字符串或某种奇怪的限制,所以我尝试用一​​个字母为我的ID添加前缀,例如:

var id = 'k' + id.toString();
Run Code Online (Sandbox Code Playgroud)

仍然不起作用!但是,当我使用Chrome的控制台面板并手动执行此操作时,例如:

var data = {};
var data['1'] = false;
Run Code Online (Sandbox Code Playgroud)

这有效,所以我做错了什么?

data.['key'] = value;无论如何,运营的官方名称是什么?这有助于了解何时向Google寻求帮助.


更新1:好的,似乎可能是由于以下原因:

var data = localStorage.getItem('model.state');
Run Code Online (Sandbox Code Playgroud)

当我将其更改为:

var data = {};
Run Code Online (Sandbox Code Playgroud)

它突然开始起作用了!


更新2:我看到我做错了什么(但仍然不确定为什么它给了我一个'未定义'错误......任何人?).

我做了以下事情:

var data = localStorage.getItem('model.state');
if (data) data = JSON.parse(data);
Run Code Online (Sandbox Code Playgroud)

它开始按预期工作.对不起...感谢大家的帮助!

Min*_*hev 7

您收到此错误,因为data.model未定义.为了防止抛出错误,您可以使用:

data.model = data.model || {};
data.model[id.toString()] = false;
Run Code Online (Sandbox Code Playgroud)

这是以下的简短版本:

if (!data.model) {
  data.model = {};
}
data.model[id.toString()] = false;
Run Code Online (Sandbox Code Playgroud)