Вы читаете английскую версию этой статьи, так как пока нет перевода на данный язык. Помогите нам перевести эту статью!
Глобальное свойство globalThis
содержит значение глобального this
, который является глобальным объектом.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
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 and WindowProxy
In many engines globalThis
will be a reference to the actual global object, but in web browsers, due to iframe and cross-window security considerations, it references a Proxy
around the actual global object (which you can't directly access). This distinction is rarely relevant in common usage, but important to be aware of.
Название
Некоторые популярные названия, такие как 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! }
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
globalThis proposal | Stage 3 |
Совместмость с браузерами
Компьютеры | Мобильные | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
globalThis | Chrome Полная поддержка 71 | Edge Нет поддержки Нет | Firefox Полная поддержка 65 | IE Нет поддержки Нет | Opera Нет поддержки Нет | Safari Полная поддержка 12.1 | WebView Android Полная поддержка 71 | Chrome Android Полная поддержка 71 | Firefox Android Полная поддержка 65 | Opera Android Нет поддержки Нет | Safari iOS Полная поддержка 12.2 | Samsung Internet Android Полная поддержка 10.0 | nodejs Полная поддержка 12.0.0 |
Легенда
- Полная поддержка
- Полная поддержка
- Нет поддержки
- Нет поддержки