无法将属性设置为对象

时间:2012-03-30 10:25:16

标签: javascript jquery

var data = {};


....

data[someprop][someotherprop] = 'bla bla'

我得到了

Uncaught TypeError: Cannot read property ... of undefinedCannot set property of...

是的,该对象没有这些属性..但是我在那行中设置它们我得到错误lol。那是怎么回事?

5 个答案:

答案 0 :(得分:6)

您正在尝试将属性分配给不存在的对象,运行该语句等同于

data.someprop.someotherprop解析器不会自动为您创建data.someprop,因此会出错。

您必须初始化someprop

data.someprop = {};
data['someprop']['someotherprop'] = 'gw ganteng';

答案 1 :(得分:3)

您需要以不同的步骤设置属性,如下所示:

var data = {};


data[someprop] = {}; 
data[someprop][someotherprop] = 'bla bla';

在您设置对象数据之前,对象数据将没有名为“someprop”的属性。

答案 2 :(得分:3)

var data = {};
data[someprop] = {someotherprop:'bla bla'};

否则data[someprop]将是未定义的

答案 3 :(得分:1)

您需要先创建data[someprop]

var data = {};
data[someprop] = {};
data[someprop][someotherprop] = 'bla bla'

http://jsfiddle.net/infernalbadger/zXETB/

答案 4 :(得分:1)

如果somepropsomeotherprop是变量,Richard D的回答是正确的,如果它们是硬编码的字符串,您可以像这样编写代码:

var data = {someprop:{someotherprop: 'value'}};

但是,如果它们是存储在变量中的值,而你真的 - 真的想把所有东西塞进一行,试试这样的事情:

var data = {window.someprop : {window.someotherprop: 'value'}};

如果someprop值本身是对象的属性,则窗口可以被任何对象替换:

var data = {someForm.name : { formElement.name : formElement.value}};

或jQuery对象,因为你的标签建议你使用jQuery:

var data= {$('#formId').attr('name'):{$('#formSelect').attr('name'): $('#formSelect').val()}};

注意:不建议使用jQuery示例,因为id选择器在同一元素上使用了两次。 jQuery将扫描DOM树两次,因此您最好将#formSelect元素存储在某个变量中。