Глобальна властивість globalThis
містить значення глобального this
, яке являється глобальним об'єктом.
Код для цього інтерактивного приклада зберігається в репозитарії на GitHub. Якщо Ви бажаєте приєднатися до проекту інтерактивних прикладів, будь-ласка зклонуйте https://github.com/mdn/interactive-examples та відправте нам "pull request".
Атрибути поля 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 |
Браузерна Сумістність
BCD tables only load in the browser
Процес впровадження
Наступна таблиця надає денний статус впровадження для цього нововведення, оскільки globalThis
не отримала крос-браузерну стабільність. Дані згенеровані запуском відносних тестів вTest262, стандартного набору JavaScript тестів, в нічній збірці, або останього релізу для кожного браузерного JavaScript "ядра".