37 votes

Quelle est la différence entre window.console.log et console.log ?

Je viens de passer un entretien. La première question que l'on m'a posée était de savoir ce qu'est console.log() . J'ai répondu avec une telle confiance. Encore une fois,

La deuxième question était, quelle est la différence entre window.console.log() y console.log() . J'étais sans voix. J'ai essayé de faire des recherches dans Google et Stack Overflow. Je n'ai pas trouvé d'article aussi utile pour comprendre la différence entre les deux.

Toute réflexion est la bienvenue.

0 votes

0 votes

Dans une page de navigateur, ils seraient typiquement identiques car window est l'espace de nom global. pas nécessairement dans d'autres contextes.

0 votes

Ça a l'air bien. Donc il n'y a aucune différence entre la fonction et la sortie ? L'examinateur a-t-il essayé de me piéger ?

41voto

Scimonster Points 24965

Dans le contexte d'un navigateur normal, il n'y a aucune différence. console est une variable globale, et toutes les globales sont des propriétés de l'objet window objet.

console.log(console.log==window.console.log) // true

Il y a quelques réserves, notamment lorsqu'il ne s'exécute pas dans le navigateur, ou si la variable de la console a été réaffectée. T.J. Crowder l'explique joliment.

0 votes

Il y a une différence, mais elle n'est généralement pas significative.

1 votes

Ce ne sera pas true dans les travailleurs et dans d'autres contextes où window n'est pas l'objet global.

0 votes

(Et à partir de ES2015, tous les globaux ne sont pas des propriétés de l'objet global).

36voto

T.J. Crowder Points 285826

Si vous voulez dire dans l'environnement JavaScript du navigateur par défaut, il n'y en a effectivement aucun. fourni par window y console n'ont pas été suivis 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 aussi l'objet fenêtre. L'objet global contient la plupart des globaux comme propriétés (auparavant, c'était tous, mais dans ES2015, cela a changé ; les globaux créés par let , const ou class ne sont pas des propriétés de l'objet global). Mais ce n'est pas vrai dans la plupart des environnements non-browser (NodeJS, par exemple, utilise global au lieu de window ), ou même dans certains environnements de navigateur qui ne sont pas par défaut (comme l'environnement d'un travailleur web, qui ne dispose pas de window puisqu'ils ne peuvent pas accéder à la fenêtre). Ainsi, dans les environnements où window n'est pas défini, window.console.log échouera lorsque console.log ne le ferait pas (à condition que l'environnement fournisse une console ).

Pour comprendre la différence, examinons chacun d'entre eux :

console.log(...) signifie :

  1. Le moteur JavaScript doit rechercher une liaison pour l'identifiant console en commençant par le contexte d'exécution actuel, puis le suivant, puis le suivant, jusqu'à ce qu'il le trouve à portée globale.
  2. Ensuite, il consulte le log sur l'objet résultant.
  3. Puis il l'appelle

window.console.log(...) signifie :

  1. Le moteur JavaScript doit rechercher une liaison pour l'identifiant window en commençant par le contexte d'exécution actuel, puis le suivant, puis le suivant, jusqu'à ce qu'il le trouve à portée globale.
  2. Ensuite, il consulte le console sur l'objet résultant.
  3. Ensuite, il consulte le log sur l'objet résultant.
  4. Puis il l'appelle

Donc, par exemple, voici un exemple où console a été occulté, et donc console.log échoue alors que window.console.log travaux :

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();

1 votes

Également à condition de fonctionner dans une page de navigateur, ce qui n'est pas gagné d'avance.

0 votes

@pvg : C'est vrai, je viens de relire la question, et elle ne dit pas vraiment ça :-)

0 votes

@Santosh : Je ne sais pas ce que vous entendez par "priorité".

3voto

bozzmob Points 2508

Il n'y a pas de différence entre console.log y window.console.log . Faites un contrôle sur MDN . Ils citent clairement -

On peut accéder à l'objet Console à partir de n'importe quel objet global, Window on scopes de navigation, WorkerGlobalScope, et ses variantes spécifiques dans les workers via la propriété console. Il est exposé comme Window.console et peuvent être référencés simplement comme console .


En plus de cela, la question peut aussi être

Quelle est la différence entre console.log y window.console .

La réponse à cette question serait

console.log est utilisé pour la journalisation (comme vous le savez).

window.console vérifie si la console est disponible( truthy (dans le cas des navigateurs mobiles, ils ne supportent pas le débogueur/console).

Le modèle commun dans le code pour ceci est-

window.console && console.log(open_date);

Ce qui est en fait un code court pour -

if( window.console ) {
    console.log( open_date );
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X