globalThis
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑнваÑÑ 2020 г..
ÐлобалÑное ÑвойÑÑво globalThis ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение глобалÑного this, коÑоÑÑй ÑвлÑеÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑм обÑекÑом.
ÐнÑеÑакÑивнÑй пÑимеÑ
function canMakeHTTPRequest() {
return typeof globalThis.XMLHttpRequest === "function";
}
console.log(canMakeHTTPRequest());
// Expected output (in a browser): true
СинÑакÑиÑ
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 и 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!
}
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # sec-globalthis > |