This page was translated from English by the community.Learn more and join the MDN Web Docs community.
globalThis
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since январь 2020 г..
Глобальное свойствоglobalThis содержит значение глобальногоthis, который является глобальным объектом.
In this article
Интерактивный пример
function canMakeHTTPRequest() { return typeof globalThis.XMLHttpRequest === "function";}console.log(canMakeHTTPRequest());// Expected output (in a browser): trueСинтаксис
globalThis
Описание
Исторически, для доступа к глобальному объекту использовался разный синтаксис в разных средах JavaScript. В вебе вы могли использоватьwindow,self илиframes, но вWorker можно использовать толькоself. В Node.js ничего из этого не работает, поэтому вы должны использоватьglobal.
Ключевое словоthis можно использовать внутри функций в нестрогом режиме. Но в строгом режиме внутри функций и в Модуляхthis равняетсяundefined. Вы можете использоватьFunction('return this')(), но среды, которые отключаютeval(), такие какCSP в браузерах, препятствуют использованиюFunction таким способом.
СвойствоglobalThis даёт возможность стандартного доступа к глобальному значениюthis (и как следствие, к глобальному объекту) вне зависимости от окружения. В отличии от похожих свойств, таких какwindow иself, оно гарантирует работу как в среде, где естьwindow, так и в среде, где его нет. Таким образом вы можете получить доступ к глобальному объекту даже не зная в какой среде будет запущен код. Чтобы помочь запомнить название, просто запомните, что глобальное значениеthis равноglobalThis.
HTML и WindowProxy
Во многих движкахglobalThis будет ссылкой на фактический глобальный объект, но в веб-браузерах из-за соображений безопасности iframe и cross-window он ссылается наProxy вокруг фактического глобального объекта (который вы не можете получить прямым доступом). Это различие редко актуально в обычном использовании, но его важно знать.
Название
Некоторые другие популярные имена, такие какself иglobal были исключены из рассмотрения из-за того, что они могут нарушать совместимость с существующим кодом. Смотритедокумент по планированию именования для большей информации.
Примеры
ДоglobalThis единственным кросс-платформенным путём получения глобального объекта в любой среде былоFunction('return this')(). Однако, это нарушаетCSP в некоторых случаях. Например,es6-shim делает такую проверку:
var getGlobal = function () { if (typeof self !== "undefined") { return self; } if (typeof window !== "undefined") { return window; } if (typeof global !== "undefined") { return global; } throw new Error("unable to locate global object");};var globals = getGlobal();if (typeof globals.setTimeout !== "function") { // в данном окружении не существует setTimeout!}СglobalThis дополнительный поиск глобального объекта в разных средах больше не нужен:
if (typeof globalThis.setTimeout !== "function") { // в данном окружении не существует setTimeout!}Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-globalthis> |