Baseline Widely available
ÐлобалÑное ÑвойÑÑво globalThis
ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение глобалÑного this
, коÑоÑÑй ÑвлÑеÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑм обÑекÑом.
function canMakeHTTPRequest() {
return typeof globalThis.XMLHttpRequest === "function";
}
console.log(canMakeHTTPRequest());
// Expected output (in a browser): true
СинÑакÑÐ¸Ñ ÐпиÑание
ÐÑÑоÑиÑеÑки, Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к глобалÑÐ½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ Ð¸ÑполÑзовалÑÑ ÑазнÑй ÑинÑакÑÐ¸Ñ Ð² ÑазнÑÑ
ÑÑедаÑ
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
.
Ðо многиÑ
движкаÑ
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!
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4