2012-03-30 11 views
3
var data = {}; 


.... 

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

IKann eingestellt Eigenschaft nicht

Uncaught TypeError: Cannot read property ... of undefined und Cannot set property of...

Ja erhalten zum Objekt, wird das Objekt nicht diese Eigenschaften haben ..yet, aber ich sie in dieser Linie einstellen, wo Ich bekomme den Fehler lol. Was ist damit los?

+1

Ich denke, das Problem ist, dass Sie versuchen, eine Eigenschaft innerhalb eines Objekts, das selbst eine Eigenschaft ist, die noch nicht existiert. Was passiert, wenn Sie versuchen, 'someprop 'in einer Zeile zu erstellen ** und ** dann' someotherprop' zu setzen? –

+0

bitte den tatsächlichen Code anzeigen. Auch das Festlegen einer Eigenschaft in einer noch nicht vorhandenen Eigenschaft funktioniert nicht. Sie müssen zunächst 'someprop' setzen –

Antwort

1

wenn someprop und someotherprop sind Variablen undefiniert, Richard D's Antwort richtig ist, wenn sie Sind hardcodierte Strings, könnten Sie Ihren Code wie folgt schreiben:

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

wenn jedoch sind sie in Variablen gespeicherten Werten, und Sie wirklich - wirklich wollen, alles in eine einzige Zeile stopfen, versuchen, etwas wie folgt aus:

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

wo Fenster durch ersetzt werden kann jedes Objekt, wenn der someprop Wert selbst eine Eigenschaft eines Objekts ist:

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

Oder jQuery Objekte, da Ihr Tag schlagen Sie mit jQuery:

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

Hinweis: Das jQuery Beispiel ist nicht zu empfehlen, da die ID-Selektor zweimal auf dem gleichen Element verwendet wird. jQuery wird den DOM-Baum zweimal scannen, so dass Sie Ihr #formSelect Element besser irgendwo in einer Variablen speichern können.

6

Sie versuchen, eine Eigenschaft auf ein Objekt zuweisen, das nicht existiert, ist diese Aussage läuft entspricht

data.someprop.someotherprop der Parser nicht automatisch data.someprop für Sie erstellt wird, daher der Fehler.

Sie haben someprop

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

Sie die Eigenschaften in diffrent Schritten wie folgt festlegen müssen initialisiert werden:

var data = {}; 


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

Die Objektdaten werden keine Eigenschaft „someprop“ genannt haben, bevor Sie asssign es.

+0

Sie müssen die Eigenschaftsnamen in Anführungszeichen setzen, sonst wird dieser Code immer noch nicht funktionieren. Siehe [diese jsFiddle] (http: // jsfiddle.net/zXETB/4 /) –

1

Sie müssen data[someprop] zuerst erstellen:

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

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

+0

Der Code in Ihrer Antwort und der Code in Ihrem jsFiddle sind nicht gleichwertig. Das Herausnehmen der Anführungszeichen für die Eigenschaftsnamen führt zu Javascript-Fehlern. –

+0

@AnthonyGrist Ich weiß. Ich gehe davon aus, dass 'someprop' und' somepotherprop' irgendwo stehen. –

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

sonst data[someprop] wird

+0

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

Verwandte Themen