var data = {};
....
data[someprop][someotherprop] = 'bla bla'
I get
Uncaught TypeError: Cannot read property ... of undefined
and Cannot set property of...
Yes, the object doesn't have these properties ..yet, but I'm setting them in that line where I get the error lol. So what's up with that?
var data = {};
....
data[someprop][someotherprop] = 'bla bla'
I get
Uncaught TypeError: Cannot read property ... of undefined
and Cannot set property of...
Yes, the object doesn't have these properties ..yet, but I'm setting them in that line where I get the error lol. So what's up with that?
Share Improve this question asked Mar 30, 2012 at 10:25 ellabeautyellabeauty 2,5993 gold badges22 silver badges25 bronze badges 2-
1
I think the problem is that you're trying to set a property inside an object that is itself a property that doesn't exist yet. What happens if you try creating
someprop
on one line then settingsomeotherprop
in that? – Anthony Grist Commented Mar 30, 2012 at 10:27 -
please show the actual code. Also, setting an property in a property that does not exist yet will not work. You will have to set
someprop
first – Rene Pot Commented Mar 30, 2012 at 10:27
5 Answers
Reset to default 6You are trying to assign a property to an object that doesn't exist, running that statement is equivalent to
data.someprop.someotherprop
the parser won't automatically create data.someprop
for you, hence the error.
You have to initialize someprop
data.someprop = {};
data['someprop']['someotherprop'] = 'gw ganteng';
You need to set the properties in diffrent steps like this:
var data = {};
data[someprop] = {};
data[someprop][someotherprop] = 'bla bla';
The object data will not have a property named "someprop" before you asssign it.
var data = {};
data[someprop] = {someotherprop:'bla bla'};
otherwise data[someprop]
will be undefined
if someprop
and someotherprop
are variables, Richard D's answer is correct, if they are hardcoded strings, you could write your code like this:
var data = {someprop:{someotherprop: 'value'}};
if, however, they are values stored in variables, and you really - really want to cram everything into a single line, try something like this:
var data = {window.someprop : {window.someotherprop: 'value'}};
where window can be replaced by any object, if the someprop
value is itself a property of an object:
var data = {someForm.name : { formElement.name : formElement.value}};
Or jQuery objects, since your tag suggest you're using jQuery:
var data= {$('#formId').attr('name'):{$('#formSelect').attr('name'): $('#formSelect').val()}};
Note: the jQuery example is not to be remended, as the id selector is used twice on the same element. jQuery will scan the DOM-tree twice, so you're better of storing your that #formSelect
element in a variable somewhere.
You need to create data[someprop]
first:
var data = {};
data[someprop] = {};
data[someprop][someotherprop] = 'bla bla'
http://jsfiddle/infernalbadger/zXETB/