Это забавная вещь с необъявленными переменными.Механизм JS пытается преобразовать переменную в свойство window
.Так обычно foo == window.foo
.
Но, если это свойство не существует, выдается ошибка.
alert(foo); // Syntax error: foo is not defined
(Должно быть "foo не объявлено "imho, но не важно.) Эта ошибка не возникает, когда вы явно ссылаетесь на свойство окна:
alert(window.foo); // undefined
... или объявляете эту переменную:
var foo;
alert(foo); // undefined
... или использовать его для инициализации:
foo = 1; // window.foo = 1
Странно то, что оператор typeof
также предотвращает эту ошибку:
alert(typeof foo); // "undefined"
Итак, чтобы подвести итог: Вы не можете использовать необъявленные переменные в выражениях, если нет свойства window
с тем же именем или вы используете его в качестве операнда typeof
.В вашем примере window.console
не существует, и нет объявления var.Вот почему вы получаете ошибку.