Ging gerade ein Interview durch. Die erste Frage, die mir gestellt wurde, war, was console.log()
ist. Ich antwortete mit so viel Selbstvertrauen. Nochmal,
Die zweite Frage war, was ist der Unterschied zwischen window.console.log()
und console.log()
. Ich war sprachlos. Versucht, in Google und Stack Overflow zu suchen. Ich habe keinen so hilfreichen Beitrag gefunden, um den Unterschied zwischen ihnen zu verstehen.
Alle mögliche Gedanken werden sehr geschätzt.
In einem normalen Browserkontext gibt es keinen Unterschied. console
ist eine globale Variable, und alle globalen Variablen sind Eigenschaften des Objekts window
.
console.log(console.log==window.console.log) // true
Es gibt einige Einschränkungen, z. B. wenn das Programm nicht im Browser ausgeführt wird oder die Konsolenvariable neu zugewiesen wurde. T.J. Crowder erklärt es schön.
Wenn Sie in der JavaScript-Standardumgebung des Browsers meinen, gibt es effektiv keine bereitgestelltwindow
und console
wurden nicht gespiegelt oder neu zugewiesen.
In der JavaScript-Standardumgebung des Browsers ist window
ein globales Objekt, das sich auf das globale Objekt bezieht, das auch das Fensterobjekt ist. Das globale Objekt enthält die meisten globalen Elemente als Eigenschaften (früher waren es alle, aber in ES2015 hat sich dies geändert. Globale Elemente, die mit let
, const
oder class
erstellt wurden, sind keine Eigenschaften von globales Objekt). Dies gilt jedoch nicht für die meisten Nicht-Browser-Umgebungen (NodeJS verwendet beispielsweise global
anstelle von window
) oder sogar für einige Nicht-Standard-Browser-Umgebungen (z. B. eine Web-Worker-Umgebung). die kein window
hat, da sie nicht auf das Fenster zugreifen können). In Umgebungen, in denen window
nicht definiert ist, schlägt window.console.log
Fehl, wohingegen console.log
Dies nicht tun würde (vorausgesetzt, die Umgebung bietet ein globales console
).
Um den Unterschied zu verstehen, wollen wir jeden von ihnen durcharbeiten:
console.log(...)
bedeutet:
console
suchen, beginnend mit dem aktuellen Ausführungskontext, dann dem nächsten und dann dem nächsten, bis sie ihn im globalen Bereich findet.log
für das resultierende Objekt nachgeschlagen.window.console.log(...)
bedeutet:
window
suchen, beginnend mit dem aktuellen Ausführungskontext, dann dem nächsten und dann dem nächsten, bis sie ihn im globalen Bereich findet.console
für das resultierende Objekt nachgeschlagen.log
für das resultierende Objekt nachgeschlagen.Zum Beispiel hier ein Beispiel, in dem console
abgeschattet wurde und daher console.log
Fehlschlägt, während window.console.log
Funktioniert:
function foo() {
var console = 42;
try {
console.log("You WON'T see this.");
} catch (e) {
}
try {
window.console.log("You WILL see this.");
} catch (e) {
}
}
foo();
Es gibt keinen Unterschied zwischen console.log
Und window.console.log
. Überprüfen Sie MDN . Sie zitieren deutlich -
Auf das Console-Objekt kann von jedem globalen Objekt, Window on Browsing Scopes, WorkerGlobalScope und seinen spezifischen Varianten in Workern über die Property Console zugegriffen werden. Es wird als
Window.console
Angezeigt und kann einfach alsconsole
referenziert werden.
Hinzu kommt, dass die Frage möglicherweise auch
Was ist der Unterschied zwischen console.log
Und window.console
.
Die Antwort darauf wäre
console.log
Wird zur Protokollierung verwendet (wie Sie wissen).
window.console
Prüft, ob die Konsole verfügbar ist (truthy
Wert), damit wir uns als nächstes anmelden können (im Falle von mobilen Browsern unterstützen sie Debugger/Konsole nicht)
Gemeinsames Muster im Code für diese is-
window.console && console.log(open_date);
Welches ist im Grunde kurzer Code für -
if( window.console ) {
console.log( open_date );
}