Ответ 1
В обычном контексте браузера нет разницы. console
- глобальная переменная, и все глобальные переменные являются свойствами объекта window
.
console.log(console.log==window.console.log) // true
Просто прошел собеседование. Первый вопрос спросил меня, что такое console.log()
. Я ответил так уверенно. Опять же,
Второй вопрос: в чем разница между window.console.log()
и console.log()
. Я был в оцепенении. Пробовал поиск в Google и Stackoverflow. Я не нашел такого полезного сообщения, чтобы понять разницу между ними.
Любые мысли приветствуются. Спасибо.
В обычном контексте браузера нет разницы. console
- глобальная переменная, и все глобальные переменные являются свойствами объекта window
.
console.log(console.log==window.console.log) // true
Если вы имеете в виду в среде JavaScript браузера по умолчанию, то фактически не предусмотрено, что window
и console
не были затенены или переназначены.
В среде JavaScript браузера по умолчанию window
является глобальным, который ссылается на глобальный объект, который также является объектом окна. Глобальный объект содержит большинство глобальных переменных в качестве свойств (обычно это все, но в ES2015, которые были изменены; глобальные переменные, созданные let
, const
или class
, не являются свойствами глобального объекта). Но это не так в большинстве не-браузерных сред (например, NodeJS использует global
вместо window
) или даже в некоторых средах браузера, отличных от параметров по умолчанию (например, в среде веб-рабочего пользователя, которая не имеет window
, поскольку они не могут получить доступ к окну). Поэтому в средах, где window
не определен, window.console.log
не удастся, если console.log
не будет (если среда предоставляет глобальный console
).
Чтобы понять разницу, пусть каждый из них работает через:
console.log(...)
означает:
console
, начиная с текущего контекста выполнения, затем следующего, затем следующего, пока он не найдет его в глобальной области.log
на результирующем объекте. window.console.log(...)
означает:
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();
Нет разницы между 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 );
}