Das verwirrende Verhalten von Objekten und console.log
Wenn Sie die Funktion console.log() zum Untersuchen von Objekten verwenden, kann es zu seltsamen Ereignissen kommen Ergebnisse. Wenn Sie beispielsweise ein Array von Objekten protokollieren und es dann mit splice() ändern, werden Sie feststellen, dass die Konsole immer noch das ursprüngliche Array anzeigt.
Warum das passiert
Console.log prüft Objekte asynchron. Obwohl die Konsole synchron einen Verweis auf das Objekt abruft, verschiebt sie die Anzeige seiner Eigenschaften, bis Sie es erweitern (dieses Verhalten variiert je nach Browser). Wenn das Objekt vor der Inspektion geändert wird, enthalten die angezeigten Daten daher die aktualisierten Werte.
Identifizieren der Diskrepanz
Chrome bietet einen visuellen Hinweis, um Sie darauf aufmerksam zu machen Verhalten. Ein kleines „i“ erscheint in einem Feld, wenn Sie mit der Maus über das Objekt fahren, und zeigt diese Meldung an: „Der Objektwert links wurde bei der Protokollierung erfasst, der Wert unten wurde gerade ausgewertet.“
Behebung des Problems
Um diese Diskrepanz zu vermeiden, sollten Sie die Protokollierung einzelner Objekteigenschaftswerte in Betracht ziehen:
console.log(obj.foo, obj.bar, obj.baz);
Alternativ können Sie dies tun Konvertieren Sie das Objekt mit JSON.stringify():
console.log(JSON.stringify(obj));
in einen JSON-String. Ein anderer Ansatz besteht darin, die Prüfbarkeit von Objekten zu bewahren, indem Sie sie mit JSON.parse():
console.log(JSON.parse(JSON.stringify(obj)));
Beachten Sie jedoch, dass JSON nicht serialisierbare Eigenschaften wie Funktionen und DOM-Elemente entfernt. Verwenden Sie bei komplexen Objekten einen robusten Deep-Copy-Mechanismus, um solche Eigenschaften beizubehalten.
Das obige ist der detaillierte Inhalt vonWarum zeigt „console.log()' nach der Änderung unerwartete Objektwerte an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!