Je viens de passer une interview. La première question qui m'a été posée était de savoir ce qu'est console.log()
. J'ai répondu avec tant de confiance. Encore,
La deuxième question était, quelle est la différence entre window.console.log()
et console.log()
. J'étais sans voix. J'ai essayé de chercher dans Google et Stack Overflow. Je n'ai pas trouvé un article aussi utile pour comprendre la différence entre eux.
Toutes les pensées sont grandement appréciées.
Dans un contexte de navigateur normal, il n'y a aucune différence. console
est une variable globale, et tous les globaux sont des propriétés de l'objet window
.
console.log(console.log==window.console.log) // true
Il y a quelques mises en garde, comme quand il n'est pas exécuté dans le navigateur, ou si la variable de console a été réaffectée. T.J. Crowder l'explique bien.
Si vous voulez dire dans l'environnement JavaScript du navigateur par défaut, il n'y en a aucun fourniwindow
et console
n'ont pas été masqués ou réaffectés.
Dans l'environnement JavaScript du navigateur par défaut, window
est un global qui fait référence à l'objet global, qui est également l'objet window. L'objet global contient la plupart des globaux en tant que propriétés (il s'agissait de tous, mais dans ES2015, cela a changé; les globaux créés par let
, const
ou class
ne sont pas des propriétés du objet global). Mais ce n'est pas vrai dans la plupart des environnements sans navigateur (NodeJS, par exemple, utilise global
au lieu de window
), ni même dans certains environnements de navigateur non par défaut (comme un environnement de travail Web, qui n'a pas window
car ils ne peuvent pas accéder à la fenêtre). Ainsi, dans les environnements où window
n'est pas défini, window.console.log
Échouera là où console.log
Ne le serait pas (à condition que l'environnement fournisse un console
global).
Pour comprendre la différence, travaillons chacun d'eux à travers:
console.log(...)
signifie:
console
en commençant par le contexte d'exécution en cours, puis le suivant, puis le suivant, jusqu'à ce qu'il le trouve à portée globale.log
sur l'objet résultant.window.console.log(...)
signifie:
window
en commençant par le contexte d'exécution en cours, puis le suivant, puis le suivant, jusqu'à ce qu'il le trouve à portée globale.console
sur l'objet résultant.log
sur l'objet résultant.Ainsi, par exemple, voici un exemple où console
a été masqué, et donc console.log
Échoue alors que window.console.log
Fonctionne:
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();
Il n'y a aucune différence entre console.log
Et window.console.log
. Vérifiez MDN . Ils citent clairement -
L'objet Console est accessible à partir de n'importe quel objet global, Fenêtre sur les étendues de navigation, WorkerGlobalScope et ses variantes spécifiques dans les travailleurs via la console de propriétés. Il est exposé comme
Window.console
Et peut être référencé simplement commeconsole
.
Ajoutant à cela, la question peut également avoir été-
Quelle est la différence entre console.log
Et window.console
.
La réponse à cela serait-
console.log
Est utilisé pour la journalisation (comme vous le savez).
window.console
Vérifie si la console est disponible (valeur truthy
) afin que nous puissions nous connecter ensuite (dans le cas des navigateurs mobiles, ils ne prennent pas en charge le débogueur/console)
Le modèle commun dans le code pour cela est-
window.console && console.log(open_date);
Ce qui est essentiellement un code court pour -
if( window.console ) {
console.log( open_date );
}