globalThis

Переклад цієї статті ще не завершено. Будь ласка, допоможіть перекласти цю статтю з англійської мови

Глобальна властивість globalThis містить значення глобального this, яке являється глобальним об'єктом.

Атрибути поля globalThis
Доступний для запису так
Доступний для переліку ні
Доступний для налаштування так

Синтакс

globalThis

Опис

Історично, для доступу до глобальних об'єктів використовується різний синтаксис в різних оточеннях JavaScript. В Веб ви можете використовувати window, self, або frames - але в Веб Воркерах лише 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 в даному оточенні!
}

Специфікації

Специфікація Статус Коментар
ECMAScript (ECMA-262)
The definition of 'globalThis' in that specification.
Living Standard

Браузерна Сумістність

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
globalThisChrome Full support 71Edge Full support 79Firefox Full support 65IE No support NoOpera Full support 58Safari Full support 12.1WebView Android Full support 71Chrome Android Full support 71Firefox Android Full support 65Opera Android Full support 50Safari iOS Full support 12.2Samsung Internet Android Full support 10.0nodejs Full support 12.0.0

Legend

Full support  
Full support
No support  
No support

Процес впровадження

Наступна таблиця надає денний статус впровадження для цього нововведення, оскільки  globalThis не отримала крос-браузерну стабільність. Дані згенеровані запуском відносних тестів вTest262, стандартного набору JavaScript тестів, в нічній збірці, або останього релізу для кожного браузерного JavaScript "ядра".