Heim >Web-Frontend >js-Tutorial >Warum zeigt die JavaScript-Konsole von Chrome beim Auswerten von Objekten unerwartete Ergebnisse an?

Warum zeigt die JavaScript-Konsole von Chrome beim Auswerten von Objekten unerwartete Ergebnisse an?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-27 04:59:13699Durchsuche

Why Does Chrome's JavaScript Console Show Unexpected Results When Evaluating Objects?

Verhalten der JavaScript-Konsole von Chrome: Objekte träge auswerten

Das Verhalten der Chrome-JavaScript-Konsole bei der Auswertung von Objekten wurde als potenziell unerwartet beobachtet. Betrachten Sie zur Veranschaulichung den folgenden Code:

var s = ["hi"];
console.log(s);
s[0] = "bye";
console.log(s);

In Firefox gibt die Konsole Folgendes aus:

[ "hi" ]
[ "bye" ]

In der Chrome-Version 7.0.517.41 Beta lautet die Ausgabe jedoch:

[ "bye" ]
[ "bye" ]

Unerwartete Bewertung Verhalten

Dieses Verhalten deutet darauf hin, dass die Chrome-Konsole bei der Auswertung von Objekten möglicherweise „träge“ ist. Wenn die erste console.log-Anweisung ausgeführt wird, verweist die Konsole auf das Objekt im Speicher. Alle nachfolgenden Änderungen am Objekt, z. B. die Änderung des ersten Elements von „hi“ in „bye“, werden nicht in der Ausgabe der ersten console.log-Anweisung widergespiegelt. Dies bedeutet, dass die Konsole das Objekt nur zum Zeitpunkt der ersten console.log-Anweisung auswertet und den Snapshot speichert.

Fehlererklärung

Dieses Verhalten ist in dokumentiert Folgender Webkit-Fehlerbericht: https://bugs.webkit.org/show_bug.cgi?id=35801 (jetzt behoben). Der Fehler besagt, dass die Chrome-Konsole keine verzögerte Auswertung für Objekte durchführt, auf die direkt zugegriffen wird, was zu dem beobachteten Verhalten führt.

Problemumgehung

Um dieses unerwartete Verhalten zu verhindern, eine kann toString für das Objekt aufrufen, bevor es an console.log übergeben wird. Dadurch wird Chrome gezwungen, eine Darstellung des Objekts zu erstellen, die durch nachfolgende Änderungen nicht verändert wird, wodurch sichergestellt wird, dass die Konsolenausgabe den aktuellen Status des Objekts widerspiegelt.

var s = ["hi"];
console.log(s.toString());
s[0] = "bye";
console.log(s.toString());

Ausgabe:

hi
bye

Das obige ist der detaillierte Inhalt vonWarum zeigt die JavaScript-Konsole von Chrome beim Auswerten von Objekten unerwartete Ergebnisse an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn