--- title: globalThis slug: Web/JavaScript/Reference/Global_Objects/globalThis translation_of: Web/JavaScript/Reference/Global_Objects/globalThis ---
Глобальна властивість globalThis
містить значення глобального this
, яке являється глобальним об'єктом.
Код для цього інтерактивного приклада зберігається в репозитарії на GitHub. Якщо Ви бажаєте приєднатися до проекту інтерактивних прикладів, будь-ласка зклонуйте https://github.com/mdn/interactive-examples та відправте нам "pull request".
{{JS_Property_Attributes(1, 0, 1)}}
globalThis
Історично, для доступу до глобальних об'єктів використовується різний синтаксис в різних оточеннях JavaScript. В Веб ви можете використовувати {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}}, або {{domxref("Window.frames", "frames")}} - але в Веб Воркерах лише self
працюватиме. В Node.js нічого з вище-перерахоованого не працюватиме, і ви повинні використовувати global
.
Ключове слово this
ви можете використовувати в середині функцій в не-суворому режимі, інакше this
буде undefined
в Модулях та в середині функцій в суворому режимі. Ви також можете використовувати Function('return this')()
, але середовища, що відключають {{jsxref("eval", "eval()")}}, типу CSP в браузерах, перешкоджають використанню {{jsxref("Function")}} в такому вигляді.
Властивість globalThis
надає стандартний метод доступу до глобального значення this
(і як наслідок, безпосередньо до глобального об'єкту) не залежно від середовища. Навідміну від подібних властивостей, таких як window
та self
, воно гарантує роботу в середовищі де є window
та де його немає. Таким чином, ви можете отримати доступ до глобального об'єкту навіть не знаючи в якому середовищі працює код. Щоб запам'ятати назву, просто запам'ятайте що в глобальному отчені значення this
дорівнює globalThis
.
В різних двіжках об'єкт globalThis
буде посиланням до безпосередього глобального об'єкту, але в браузерах, через міркування безпеки в iframe та cross-window взаємодії, він є посиланням до {{jsxref("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 в даному оточенні! }
Специфікація | Статус | Коментар |
---|---|---|
{{SpecName("ESDraft", "#sec-globalthis", "globalThis ")}} |
{{Spec2("ESDraft")}} |
{{Compat("javascript.builtins.globalThis")}}
Наступна таблиця надає денний статус впровадження для цього нововведення, оскільки globalThis
не отримала крос-браузерну стабільність. Дані згенеровані запуском відносних тестів вTest262, стандартного набору JavaScript тестів, в нічній збірці, або останього релізу для кожного браузерного JavaScript "ядра".