Подтвердить что ты не робот

В чем разница между windows.console.log и console.log

Просто прошел собеседование. Первый вопрос спросил меня, что такое console.log(). Я ответил так уверенно. Опять же,

Второй вопрос: в чем разница между window.console.log() и console.log(). Я был в оцепенении. Пробовал поиск в Google и Stackoverflow. Я не нашел такого полезного сообщения, чтобы понять разницу между ними.

Любые мысли приветствуются. Спасибо.

4b9b3361

Ответ 1

В обычном контексте браузера нет разницы. console - глобальная переменная, и все глобальные переменные являются свойствами объекта window.

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

Ответ 2

Если вы имеете в виду в среде JavaScript браузера по умолчанию, то фактически не предусмотрено, что window и console не были затенены или переназначены.

В среде JavaScript браузера по умолчанию window является глобальным, который ссылается на глобальный объект, который также является объектом окна. Глобальный объект содержит большинство глобальных переменных в качестве свойств (обычно это все, но в ES2015, которые были изменены; глобальные переменные, созданные let, const или class, не являются свойствами глобального объекта). Но это не так в большинстве не-браузерных сред (например, NodeJS использует global вместо window) или даже в некоторых средах браузера, отличных от параметров по умолчанию (например, в среде веб-рабочего пользователя, которая не имеет window, поскольку они не могут получить доступ к окну). Поэтому в средах, где window не определен, window.console.log не удастся, если console.log не будет (если среда предоставляет глобальный console).

Чтобы понять разницу, пусть каждый из них работает через:

console.log(...) означает:

  • JavaScript-движок должен искать привязку для идентификатора console, начиная с текущего контекста выполнения, затем следующего, затем следующего, пока он не найдет его в глобальной области.
  • Затем он ищет свойство log на результирующем объекте.
  • Затем он вызывает его

window.console.log(...) означает:

  • JavaScript-движок должен искать привязку для идентификатора window, начиная с текущего контекста выполнения, затем следующего, затем следующего, пока он не найдет его в глобальной области.
  • Затем он ищет свойство console на результирующем объекте.
  • Затем он ищет свойство log на результирующем объекте.
  • Затем он вызывает его

Так, например, здесь пример, где console был затенен, и поэтому console.log не работает, тогда как window.console.log работает:

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

Ответ 3

Нет разницы между console.log и window.console.log. Проверьте MDN. Они ясно цитируют -

Доступ к объекту Консоли можно получить из любого глобального объекта. Окно на области просмотра, WorkerGlobalScope и его конкретные варианты в рабочих через консоль свойств. Он отображается как Window.console, и можно называть просто console.



Добавив к этому вопрос, возможно, также был вопрос -

Какая разница между console.log и Window.console.

Ответ для этого будет -

console.log используется для ведения журнала (как вы знаете).

Window.console проверяет, доступна ли консоль (truthy значение), чтобы мы могли записывать следующий (в случае мобильных браузеров они не поддерживают отладчик/консоль)

Общий шаблон в коде для этого -

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

В основном это короткий код для -

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