globalThis

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

A propriedade global globalThis retorna um objeto global de nível superior.

Experimente

function canMakeHTTPRequest() {
  return typeof globalThis.XMLHttpRequest === "function";
}

console.log(canMakeHTTPRequest());
// Expected output (in a browser): true

Sintaxe

globalThis

Descrição

Historicamente, o acesso ao escopo global exigiu uma sintaxe diferente em diferentes ambientes JavaScript. Na web você pode usar window, self ou frames - porém em Web Workers somente self funcionará. Em Node.js nada disso funciona e você deve usar global. A palavra-chave this poderia ser usada dentro de funções em execução no modo sloppy, mas this será undefined em módulos, e dentro de funções em execução no strict mode.

A propriedade globalThis fornece uma maneira padrão de acessar o objeto global entre ambientes. Ao contrário de propriedades semelhantes, como window e self, é garantido que funcione em contextos window e non-window. Dessa forma, você pode acessar o objeto global de maneira consistente sem precisar saber em qual ambiente o código está sendo executado.

Para ajudá-lo a lembrar o nome, lembre-se que no escopo global, o valor de this é globalThis.

Nome

Várias outras opções de nomes populares, como self e global foram removidas da discussão devido ao seu potencial em quebrar a compatibilidade com o código existente.

Exemplos

Antes de globalThis, a única maneira confiável de obter o objeto global para um ambiente era Function('return this')(). No entanto, isso causa violações CSP em algumas configurações, então es6-shim usa uma verificação como essa, por exemplo:

js
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") {
  // sem setTimeout neste ambiente!
}

Com globalThis disponível, a busca global adicional entre ambientes não é mais necessária:

js
if (typeof globalThis.setTimeout !== "function") {
  // sem setTimeout neste ambiente!
}

Especificações

Especificação Status Comentário
globalThis proposal Stage 3

Compatibilidade com navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
globalThis

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support