Живой пример показывает, что большинство из них "[object Window]"
, эта ошибка в основном относится к консоли. Обратите внимание, что Object.prototype.toString.call(window)
по-прежнему возвращает глобальный
var s = toString;
console.log(s()); // "[object global]"
console.log(toString()); // "[object Object]"
console.log(window.toString()); // "[object Window]"
(function () {
var s = toString;
console.log(s()); // "[object Undefined]"
})();
(function () {
var s = window.toString;
console.log(s()); // "[object Window]"
})();
console.log(Object.prototype.toString.call(window)); // "[object global]"
console.log(window.toString.call(window)); // "[object DOMWindow]"
Вы нашли мешок с неопределенным поведением. Я рекомендую вам убежать.
Часть этого можно объяснить, сказав, что глобальный контекст и объект окна, вероятно, не одно и то же (большой намек [объект глобальный]).
Обратите внимание, что this === window
во всех 5 случаях.
Обратите внимание, что window.toString === Object.prototype.toString; // false
объясняет довольно многое из этого. Похоже, window.toString
это специальная (но другая) функция