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

0voto

Suhail AKhtar Punkte 1283

Ich habe die MongoDB Fehlermeldung nicht im geworfenen Fehler in meiner NodeJS API-Antwort erhalten, also habe ich Folgendes gemacht

// Es hat nicht funktioniert
console.log(error.message) // gibt den Fehler aus
let response = error;
// message-Eigenschaft war nicht in der Antwort verfügbar.
/* 
{
  "status": "error",
  "error": {
    "driver": true,
    "name": "MongoError",
    "index": 0,
    "code": 11000,
    "keyPattern": {
      "event_name": 1
    },
    "keyValue": {
      "event_name": "followup"
    }
  }
}
*/

// also habe ich das gemacht
let message = error.message;
let response = JSON.parse(JSON.stringify(error));
response.message = message;
// message-Eigenschaft ist jetzt in der Antwort verfügbar.
/* 
{
  "status": "error",
  "error": {
    "driver": true,
    "name": "MongoError",
    "index": 0,
    "code": 11000,
    "keyPattern": {
      "event_name": 1
    },
    "keyValue": {
      "event_name": "followup"
    },
    "message": "E11000 duplicate key error collection: mycollections.notificationevents index: event_name_1 dup key: { event_name: \"followup\" }"
  }
}
*/

0voto

jp06 Punkte 125

Ich hatte auch dieses frustrierende Problem, ich habe die setTimeout() und die JSON.stringify und JSON.parse Lösungen ausprobiert, obwohl ich wusste, dass es nicht funktionieren würde, da ich denke, dass es hauptsächlich JSON- oder Promise-bezogene Probleme sind, und natürlich hat es nicht funktioniert. In meinem Fall habe ich jedoch nicht sofort bemerkt, dass es einen dummen Fehler gab. Ich habe tatsächlich versucht, auf einen Eigenschaftsnamen mit einer anderen Schreibweise zuzugreifen. Es sieht ungefähr so aus:

const wrongPropName = "SomeProperty"; // Großbuchstabe "S"
const correctPropName = "someProperty"; // Kleinbuchstabe "s"
const object = { someProperty: "Hallo Welt!" };

console.log('Zugriff auf "SomeProperty":', object[wrongPropName]);
console.log('Zugriff auf "someProperty":', object[correctPropName])

Es hat eine Weile gedauert, bis ich bemerkt habe, dass die Eigenschaftsnamen in meinem Fall entweder alle klein oder einige gemischt groß- und kleinbuchstabig sein können. Es stellte sich heraus, dass eine Funktion in meiner Webanwendung etwas durcheinander gebracht hat, um meine Eigenschaftsnamen (sie hat ein .toLowerCase() neben den generierten Schlüsselnamen).

Also, die Lektion gelernt, prüfe die Schreibweise der Eigenschaftsnamen genauer.

0voto

Mahee Gamage Punkte 413

Überprüfen Sie, ob Sie im Konsolenfenster Filter angewendet haben. Bei mir passiert das im Chrome-Konsolenfenster.

0voto

Marcus Downing Punkte 9754

Ich hatte ein Problem wie dieses und fand heraus, dass die Lösung mit Underscore.js zu tun hatte. Mein anfängliches Protokollieren ergab keinen Sinn:

console.log(JSON.stringify(obj, null, 2));

> {
>   "code": "foo"
> }

console.log(obj.code);

> undefined

Ich fand die Lösung, indem ich mir auch die Schlüssel des Objekts anschaute:

console.log(JSON.stringify(Object.keys(obj)));

> ["_wrapped","_chain"]

Dies führte mich dazu zu erkennen, dass obj tatsächlich ein Underscore.js-Wrapper um ein Objekt war und das anfängliche Debugging mich angelogen hatte.

0voto

anacampesan Punkte 105

Keiner der JSON stringify/parse hat für mich funktioniert.

formValues.myKey:               undefined
formValues.myKey mit Timeout:  Inhalt

Ich wollte den Wert von formValues.myKey und was geholfen hat, war ein setTimeout von 0 wie im folgenden Beispiel. Hoffe es hilft.

console.log('formValues.myKey: ',formValues.myKey);
setTimeout( () => { 
  console.log('formValues.myKey mit Timeout: ', formValues.myKey);
}, 0 );

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