2012-04-03 4 views
2

Okay, also habe ich ein bisschen gesucht, bevor ich gepostet habe ... kein Glück (oder vielleicht bin ich nur dumm).OOO javascript: object selbstreferenz gibt undefined zurück, aber die Konsole zeigt an, dass es existiert

Ich habe dieses Array I "myArray" nennen, und ich schiebe Gegenstände darauf einige Variablen zu füllen:

myArray.push({ 
    time  : (y.moveTime - y.startTime), 
    pos   : y.move, 
    last  : myArray[y.recents.length-1].time 
}); 

Mein Problem ist, warum firebug über die "letzte" Variable beschwert sich: "Uncaught Typeerror: Eigenschaft 'Zeit' von undefined kann nicht gelesen werden ". Wenn ich es tue

last  : myArray[y.recents.length-1] 

alles ist in Ordnung.

Eine Beobachtung, die ich nicht verstehe: Das Array ist leer, wenn ich die Referenz ".time" habe, aber wenn ich es entfernen, ist das Array voll.

Was fehlt mir hier? Ich verstehe es nicht :(

Danke für alle Hinweise.

+0

Ich sollte hinzufügen, dass ich verstehe, dass das allererste Element in diesem Array die "letzte" Variable "undefined" haben wird, da es nichts zurück zu verweisen hat. – tim

+2

Haben Sie überprüft, dass 'myArray [y.recents.length - 1]' existiert und nicht 'undefiniert' ist? – 0x499602D2

+0

@tim Sie haben die Antwort direkt in Ihrem eigenen Kommentar: Für das erste Element 'myArray [y.recents.length-1]' ist nicht definiert, und 'undefined.time' schlägt fehl. – Niko

Antwort

4

Der Fehler bedeutet, dass der ausgewertete Wert von

myArray[y.recents.length-1] 

ist kein Objekt, das eine time Eigenschaft hat. Dies geschieht wahrscheinlich Wenn Sie die erste push ausführen, weil das Array noch keine Elemente hat

Wenn Sie den Fehler ausblenden möchten und nur die last-Eigenschaft zu undefined in diesem c zuweisen ase, können Sie einfach einen Fehlerwert hinzu:

last: (myArray[y.recents.length - 1] || {}).time 
+0

Danke für die Klarstellung, Peter, ich verstehe es jetzt . – tim

0

Der Wert von myArray[y.recents.length-1] kann alles (etwas Schnur, Objekt, ein Array, null etc.) sein. Sie können den Wert von last damit festlegen und wird keinen Fehler machen.

Wenn Sie jedoch eine Eigenschaft auf ein Nichtobjekt setzen (wie Einstellung time), wird ein Fehler verursacht.

Verwandte Themen