3
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?

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 setting someotherprop in that? 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 Commented Mar 30, 2012 at 10:27

5 Answers 5

6

You 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';
Sign up to request clarification or add additional context in comments.

Comments

3

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.

1 Comment

You need to put quotes around the property names, otherwise that code still isn't going to work. See this jsFiddle
3
var data = {};
data[someprop] = {someotherprop:'bla bla'};

otherwise data[someprop] will be undefined

1 Comment

var data = { someprop : { someotherprop : 'bla bla' }}; :)
1

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 recommended, 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.

Comments

1

You need to create data[someprop] first:

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

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

2 Comments

The code in your answer and the code in your jsFiddle aren't equivalent. Taking out the quotes for the property names results in Javascript errors.
@AnthonyGrist I know. I'm assuming someprop and somepotherprop are set somewhere.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.