2012-10-09 6 views
5

Mögliche Duplizieren:
Is Chrome's JavaScript console lazy about evaluating arrays?Warum zeigt Chrome einen Wert an, der bereits aus einem Array entfernt wurde?

Chrome js Konsole ein Array mit einem gelöschten Wert zeigt, bevor der Wert wird gelöscht. Warum?

jsFiddle that demonstrates this behavior.

var list=[]; 
list.push("one"); 
list.push("two"); 
list.push("three"); 
console.log(list);      //["two", "three", undefined × 1] 
$("#output").append(JSON.stringify(list));//["one","two","three"] 

list.shift(); 

$("#output").append($("<br>")); 

console.log(list);      //["two", "three"] 
$("#output").append(JSON.stringify(list));//["two","three"] 

+0

Möglicherweise gibt es autoritativere Antworten auf ähnliche Fragen: http://stackoverflow.com/questions/4198912/bizarre-console-log-behaviour-in-chrome-developer-tools, http://stackoverflow.com/questions/11214430/false-value-in-console-log, http://stackoverflow.com/questions/11118758/bug-in-console-log –

+0

http://stackoverflow.com/questions/4057440/is-chromes -javascript-console-lazy-about-evaluating-arrays? lq = 1 –

+0

Haben wir eine Reihe von doppelten Fragen für dieses Problem? –

Antwort

6

in Chrom console.log wird "delayed"; in diesem Fall bis zum Ende des Programms glaube ich.

Das heißt, in Chrome, console.lognicht stringify das Eingabeobjekt sofort sondern führt die stringification „einige Zeit später“ (nach dem das Objekt in diesem Fall geändert wurde), aber bevor es tatsächlich zeigt die Ergebnis,

console.log(JSON.stringify(list)) würde das erwartete Ergebnis zeigen.


dies als Fehler gemeldet wurde as far back as Chrome 5 (das Bug-Fix Ziel ist mstone-22, also nicht 20/21 Chrome?) Und eine Fix hat zur webkit Basis hinzugefügt:

Ab heute führt das Ablegen eines Objekts (Arrays) in der Konsole dazu, dass die Objekte bei der Erweiterung des Konsolenobjekts gelesen werden (z. B. träge). Dies bedeutet, dass das Dumping desselben Objekts während der Mutation schwer über die Konsole zu debuggen ist.

Diese Änderung beginnt mit dem Erstellen von verkürzten Vorschauen für Objekte/Arrays zum Zeitpunkt ihrer Protokollierung und übergibt diese Informationen an das Front-End. Dies geschieht nur, wenn das Frontend bereits geöffnet ist, es funktioniert nur für console.log(), nicht Live-Konsole Interaktion.

+0

das scheint tatsächlich der Fall zu sein. Hast du eine Referenz dafür? –

+0

@ antony.trupe Leider nicht :( –

+0

Wenn es ein Fehler ist, dann sollte es an [crbug.com] (http://crbug.com/) gesendet werden? –