461 Stimmen

Kann nicht auf Objekteigenschaft zugreifen, obwohl sie in einem Konsolenprotokoll angezeigt wird

Unten finden Sie die Ausgabe dieser beiden Protokolle. Das erste zeigt deutlich das gesamte Objekt mit der Eigenschaft, auf die ich zugreifen möchte, aber in der nächsten Zeile des Codes kann ich nicht darauf zugreifen mit config.col_id_3 (sehen Sie das "undefined" im Screenshot?). Kann das jemand erklären? Ich kann auf jede andere Eigenschaft zugreifen, außer auf field_id_4.

console.log(config);
console.log(config.col_id_3);

Das ist, was diese Zeilen in der Konsole ausgeben

Konsolenausgabe

16voto

rolinger Punkte 2356

In meinem Fall habe ich ein Objekt an ein Promise übergeben. Innerhalb des Promise habe ich weitere Schlüssel/Werte dem Objekt hinzugefügt und als es fertig war, hat das Promise das Objekt zurückgegeben.

Allerdings habe ich bei der Überprüfung übersehen, dass das Promise das Objekt zurückgab, bevor es vollständig fertig war ... daher hat der Rest meines Codes versucht, das aktualisierte Objekt zu verarbeiten und die Daten waren noch nicht vorhanden. Aber wie oben schon erwähnt, im Konsolenfenster sah ich das vollständig aktualisierte Objekt, konnte jedoch nicht auf die Schlüssel zugreifen - sie wurden als undefined zurückgegeben. Bis ich das sah:

console.log(obj) ;
console.log(obj.newKey1) ;

// im Konsolenfenster zurückgegeben
> Object { origKey1: "blah", origKey2: "blah blah"} [i]
    origKey1: "blah"
    origKey2: "blah blah"
    newKey1: "this info"
    newKey2: "that info"
    newKey3: " more info"
> *undefined*

Das [i] ist ein kleines Symbol, als ich darüber schwebte, stand dort Der Objektwert links wurde beim Protokollieren geschnappt, der Wert unten wurde gerade erst ausgewertet. Dann wurde mir klar, dass mein Objekt ausgewertet wurde, bevor das Promise es vollständig aktualisiert hatte.

14voto

Mike Rizzo Punkte 141

Ich bin gerade auf dieses Problem gestoßen mit den Objekten, die von csv-parser aus einer CSV-Datei generiert wurden, die von MS Excel generiert wurde. Ich konnte auf alle Eigenschaften zugreifen, außer der ersten Eigenschaft - aber sie würde angezeigt werden, wenn ich das gesamte Objekt mit console.log schrieb.

Es stellte sich heraus, dass das UTF-8 CSV-Format 3 Bytes (ef bb bf) am Anfang einfügt, die einem unsichtbaren Zeichen entsprechen - die als Teil des ersten Eigenschaftskopfes von csv-parser eingefügt wurden. Die Lösung bestand darin, die CSV mit der Nicht-UTF-Option neu zu generieren, und dadurch wurde das unsichtbare Zeichen eliminiert.

12voto

makkasi Punkte 3678

Meine Daten waren gerade ein JSON-Datenstring. (Diese Variable wurde als JSON-String in der Sitzung gespeichert).

console.log(json_string_object)

-> gibt einfach die Darstellung dieses Strings zurück und es gibt keine Möglichkeit zu unterscheiden, ob es ein String oder ein Objekt ist.

Also musste ich es einfach wieder in ein echtes Objekt umwandeln:

object = JSON.parse(json_string_object);

12voto

Jette Punkte 2259

Ich hatte heute mit diesem Problem zu kämpfen und dachte, ich hinterlasse eine Antwort mit meiner Lösung.

Ich habe ein Datenobjekt über Ajax abgerufen, etwas wie: {"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}

Angenommen, dieses Objekt befindet sich in einer Variable namens data. Immer wenn ich data.i18n referenzierte, bekam ich undefined.

  1. console.log(data) zeigte das erwartete Objekt
  2. console.log(Object.keys(data)) sagte ["constants","i18n"] wie erwartet
  3. Das Umbenennen von i18n zu inter änderte nichts
  4. Ich habe sogar versucht, die Daten zu ändern, um "i18n" zum ersten Objekt zu machen
  5. Ich habe den Code verschoben, um absolut sicherzustellen, dass das Objekt vollständig gesetzt war und es kein Problem mit dem Ajax-Versprechen gab.

Nichts half... Dann habe ich die Daten auf der Serverseite in das php-Protokoll geschrieben und es hat dies offenbart:

{"constants": {"value1":"x","value2":"y"},"\u045618n" {"data1":"x", "data2":"y"}}

Das "i" im Indexschlüssel war tatsächlich ein u0456 (kyrillisches i). Dies war in meinem php-Editor oder im Browserkonsolenprotokoll nicht sichtbar. Nur das php-Protokoll hat dies enthüllt... Das war ein kniffliger Fall...

11voto

Mateut Alin Punkte 1143

Im Jahr 2018 warnt uns Mozilla in den Mozilla Docs hier!

Ich zitiere "Logging Objects":

Verwende nicht console.log(obj);, sondern console.log(JSON.parse(JSON.stringify(obj)));.

So bist du sicher, dass du den Wert von obj im Moment des Loggens siehst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X