Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.

View in English Always switch to English

globalThis

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨janeiro de 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