Google Chrome-Konsole.log() Inkonsistenz mit Objekten und arrays

Half ich einem Kollegen einige debug-code heute und ich habe ein seltsames Verhalten mit console.log() in Google Chrome:

Scheint es, dass, wenn Sie:

  1. Erstellen Sie eine verschachtelte array (z.B. [[345,"test"]])
  2. Log-array auf der Konsole mit console.log().
  3. Ändern die inneren array-Werte, dann console.log() ausgegeben wird später Wert -- nicht die Werte des Arrays zum Zeitpunkt der console.log() ausgeführt wurde.

JavaScript:

var test = [[2345235345,"test"]]
console.log(test);
test[0][0] = 1111111;
//outputs: [[1111111,"test"]]

var testb = {};
testb.test = "test";
console.log(testb);
testb.test = "sdfgsdfg";
//outputs: {"testb":"test"}


var testc = ["test","test2"];
console.log(testc);
testc[0] = "sdxfsdf";
//outputs: ["test","test2"]

JSFiddle-Beispiel

Dieses Verhalten nicht passiert in Firefox.

Auch zu beachten, wenn ich trat durch seinen code Zeile für Zeile in der Chrome-debugger, dann console.log() würde die Ausgabe der richtigen Werte.

Gibt es eine Erklärung für dieses seltsame Phänomen oder ist es nur ein Fehler mit Google Chrome?

EDIT:

Habe ich eingegrenzt, die Schritte zum reproduzieren des inkonsistente console.log() Verhalten:

Wenn Sie hinzufügen, um dieses Skript zu Ihrer Seite:

var greetings=['hi','bye'];
console.log(greetings);
setTimeout(function(){
    greetings.push('goodbye');
},3000);

und öffnen es in einem neuen Fenster mit der Chrome - Konsole-Fenster bereits geöffnet ist, dann die console.log() Ausgabe wird anders sein, als wenn Sie das laden der Seite mit der Konsole-Fenster geschlossen. Hier ein JSFiddle, der zeigt, dass.

Im ersten Fall, mit dem console-Fenster bereits geöffnet ist, console.log() - Ausgabe wird der aktuelle Wert des Arrays (also zwei Elemente).

Im zweiten Fall, mit dem console-Fenster zunächst geschlossen und öffnen nur nach laden der Seite console.log() ausgegeben wird später die Werte des Arrays (d.h., drei items).

Ist das ein bug in Google Chrome console.log() Funktionalität?

Obwohl ich nicht weiß, wie, genau, dies ist kein bug, Chrome tut diese Art der Sache mit einer gewissen Häufigkeit; melden Sie das Ergebnis einer AJAX-Anfrage, zu; es rückwirkend füllt es in, vermutlich für Klarheit bei der Anmeldung. Ich bin zu unfachmännischen zu beginnen, um zu erklären, warum, ich habe gerade ein ähnliches problem, verwechseln Sie mich. Jeder code, der hing auf den richtigen Wert funktionieren würde gut, obwohl.
Es scheint, dass der Wert angemeldet auf der Konsole ist so etwas wie ein live - Wert. Jeder Skalare Wert innerhalb der Referenz-Objekte nicht berechnet werden, bis Sie erweitern Sie die Objekte in Frage, die in der Konsole ausgegeben
Es scheint seltsam, dass die Ergebnisse einer console.log() unterliegen würde so etwas wie eine race-Bedingung. Wenn ich trat durch meine Kollegen-code, der console.log() würde die Ausgabe der Werte, die wir erwarten, aber mit der normalen Ausführung, es würde die Ausgabe einer später geänderten Wert -- scheint, wie würden Sie wollen, dass die Werte des Arrays in dem moment console.log() ausgeführt wird.
es ist kein bug, Chrome absichtlich macht-Konsole.log-Anzeige der live-Wert
möglich, Duplikat der console.log() zeigt den veränderten Wert einer variable, bevor der Wert tatsächlich ändert sich

InformationsquelleAutor Elliot B. | 2014-06-12

Schreibe einen Kommentar