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
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:
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:
if (typeof globalThis.setTimeout !== "function") {
// sem setTimeout neste ambiente!
}
Especificações
Especificação | Status | Comentário |
---|---|---|
globalThis proposal | Stage 3 |
Compatibilidade com navegadores
BCD tables only load in the browser