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çãoStatusComentário
globalThis proposalStage 3

Compatibilidade com navegadores