var data = {};
....
data[someprop][someotherprop] = 'bla bla'
我得到了
Uncaught TypeError: Cannot read property ... of undefined
和Cannot set property of...
是的,该对象没有这些属性..但是我在那行中设置它们我得到错误lol。那是怎么回事?
答案 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'
答案 4 :(得分:1)
如果someprop
和someotherprop
是变量,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
元素存储在某个变量中。