--- title: globalThis slug: Web/JavaScript/Reference/Global_Objects/globalThis translation_of: Web/JavaScript/Reference/Global_Objects/globalThis ---
{{jsSidebar("Objects")}}

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

{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html")}}

{{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.

HTML та WindowProxy

В різних двіжках об'єкт 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 "ядра".

{{EmbedTest262ReportResultsTable("globalThis")}}