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

402voto

Matt Punkte 72534

Die Ausgabe von console.log(anObject) ist irreführend; der Zustand des angezeigten Objekts wird erst aufgelöst, wenn Sie den im Konsolenfenster angezeigten Objektbaum erweitern, indem Sie auf > klicken. Es ist nicht der Zustand des Objekts, als Sie es console.log'd haben.

Versuchen Sie stattdessen console.log(Object.keys(config)) oder sogar console.log(JSON.stringify(config)) und Sie werden die Schlüssel oder den Zustand des Objekts zum Zeitpunkt des Aufrufs von console.log sehen.

Sie werden (normalerweise) feststellen, dass die Schlüssel nach Ihrem console.log-Aufruf hinzugefügt werden.

103voto

ramin Punkte 1182

Ich hatte gerade dieses Problem mit einem Dokument, das aus MongoDB geladen wurde und Mongoose verwendet.

Wenn ich console.log() auf das gesamte Objekt ausführte, wurden alle Dokumentfelder (wie sie in der db gespeichert sind) angezeigt. Einige einzelne Eigenschaftszugriffe lieferten jedoch undefined, während andere (einschließlich _id) einwandfrei funktionierten.

Es stellte sich heraus, dass Eigenschaftszugriffe nur für diejenigen Felder funktionieren, die in meiner mongoose.Schema(...)-Definition angegeben sind, während console.log() und JSON.stringify() alle in der db gespeicherten Felder zurückgeben.

Lösung (wenn Sie Mongoose verwenden): Stellen Sie sicher, dass alle Ihre db-Felder in mongoose.Schema(...) definiert sind.

34voto

Tope Punkte 888

Ich hatte das gleiche Problem. Die Lösung für mich bestand darin, die stringify-Ausgabe als Eingabe für das Parsen des JSON zu verwenden. Das hat bei mir funktioniert. Hoffentlich ist es auch nützlich für dich

var x =JSON.parse(JSON.stringify(obj));
console.log(x.property_actually_now_defined);

34voto

Asaf Lopez Punkte 539

Überprüfe, ob sich im Objekt ein Array von Objekten befindet. Ich hatte ein ähnliches Problem mit einem JSON:

    "terms": {
        "category": [
            {
                "ID": 4,
                "name": "Cirugia",
                "slug": "cirugia",
                "description": "",
                "taxonomy": "category",
                "parent": null,
                "count": 68,
                "link": "http://distritocuatro.mx/enarm/category/cirugia/"
            }
        ]
    }

Ich habe versucht, auf den 'name'-Schlüssel von 'category' zuzugreifen, und habe den undefined-Fehler erhalten, weil ich Folgendes verwendet habe:

var_name = obj_array.terms.category.name

Dann habe ich festgestellt, dass eckige Klammern vorhanden sind, das bedeutet, dass es ein Array von Objekten innerhalb des Schlüssels 'category' gibt, da es mehr als ein Kategorieobjekt haben kann. Um also den 'name'-Schlüssel zu erhalten, habe ich dies verwendet:

var_name = obj_array.terms.category[0].name

Und das hat funktioniert.

Vielleicht ist es für diese Antwort zu spät, aber ich hoffe, dass jemand mit demselben Problem dies so finden wird, wie ich es getan habe, bevor ich die Lösung gefunden habe :)

33voto

Lai Xue Punkte 1485

Die Eigenschaft, auf die Sie zugreifen möchten, existiert möglicherweise noch nicht. Console.log funktioniert, weil es nach einer kurzen Verzögerung ausgeführt wird, aber das gilt nicht für den Rest Ihres Codes. Versuchen Sie es damit:

var a = config.col_id_3;    //undefined

setTimeout(function()
{
    var a = config.col_id_3;    //voilà!

}, 100);

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