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

时间:2014-03-08 18:26:09

标签: javascript

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

data["property"] = value;

data.property = value;

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

data.model[id.toString()] = false;

但是我收到以下错误:

Uncaught TypeError: Cannot set property '1' of undefined

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

var id = 'k' + id.toString();

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

var data = {};
var data['1'] = false;

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

data.['key'] = value;操作的官方名称是什么?这有助于了解何时向Google寻求帮助。


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

var data = localStorage.getItem('model.state');

当我将其更改为:

var data = {};

它突然开始起作用了!


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

我做了以下事情:

var data = localStorage.getItem('model.state');
if (data) data = JSON.parse(data);

它开始按预期工作。对此感到抱歉...感谢大家的帮助!

1 个答案:

答案 0 :(得分:7)

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

data.model = data.model || {};
data.model[id.toString()] = false;

这是以下的简短版本:

if (!data.model) {
  data.model = {};
}
data.model[id.toString()] = false;