`globalThis`
Si has escrito JavaScript para usar en un navegador web antes, es posible que hayas usado window
para acceder al this
global. En Node.js, quizás hayas usado global
. Si has escrito código que debe funcionar en cualquiera de estos entornos, quizás detectaste cuál de estos está disponible y luego lo usaste, pero la lista de identificadores a verificar crece con el número de entornos y casos de uso que deseas admitir. Esto se sale de control rápidamente:
// Un intento ingenuo de obtener el `this` global. ¡No uses esto!
const getGlobalThis = () => {
if (typeof globalThis !== 'undefined') return globalThis;
if (typeof self !== 'undefined') return self;
if (typeof window !== 'undefined') return window;
if (typeof global !== 'undefined') return global;
// Nota: ¡Esto aún podría devolver un resultado incorrecto!
if (typeof this !== 'undefined') return this;
throw new Error('No se puede localizar el `this` global');
};
const theGlobalThis = getGlobalThis();
Para más detalles sobre por qué el enfoque anterior es insuficiente (así como una técnica aún más complicada), lee un horripilante polyfill de globalThis
en JavaScript universal.
La propuesta de globalThis
introduce un mecanismo unificado para acceder al this
global en cualquier entorno JavaScript (¿navegador, Node.js u otro?), independientemente del propósito del script (¿script clásico o módulo?).
const theGlobalThis = globalThis;
Ten en cuenta que es posible que el código moderno no necesite acceso al this
global en absoluto. Con los módulos de JavaScript, puedes importar
y exportar
funcionalidad de manera declarativa en lugar de lidiar con el estado global. globalThis
sigue siendo útil para polyfills y otras bibliotecas que necesitan acceso global.