globalThis

Вы читаете английскую версию этой статьи, так как пока нет перевода на данный язык. Помогите нам перевести эту статью!

Глобальное свойство globalThis содержит значение глобального this, который является глобальным объектом.

Синтаксис

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

Совместмость с браузерами

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
globalThisChrome Полная поддержка 71Edge Нет поддержки НетFirefox Полная поддержка 65IE Нет поддержки НетOpera Нет поддержки НетSafari Полная поддержка 12.1WebView Android Полная поддержка 71Chrome Android Полная поддержка 71Firefox Android Полная поддержка 65Opera Android Нет поддержки НетSafari iOS Полная поддержка 12.2Samsung Internet Android Полная поддержка 10.0nodejs Полная поддержка 12.0.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки