wake-up-neo.com

Was ist der Unterschied zwischen window.console.log und console.log?

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.

32
Santosh

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.

38
Scimonster

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:

  1. Die JavaScript-Engine muss nach einer Bindung für den Bezeichner console suchen, beginnend mit dem aktuellen Ausführungskontext, dann dem nächsten und dann dem nächsten, bis sie ihn im globalen Bereich findet.
  2. Anschließend wird die Eigenschaft log für das resultierende Objekt nachgeschlagen.
  3. Dann nennt es es

window.console.log(...) bedeutet:

  1. Die JavaScript-Engine muss nach einer Bindung für den Bezeichner window suchen, beginnend mit dem aktuellen Ausführungskontext, dann dem nächsten und dann dem nächsten, bis sie ihn im globalen Bereich findet.
  2. Anschließend wird die Eigenschaft console für das resultierende Objekt nachgeschlagen.
  3. Anschließend wird die Eigenschaft log für das resultierende Objekt nachgeschlagen.
  4. Dann nennt es es

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();
35
T.J. Crowder

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 als console 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 );
}
2
bozzmob