globalThis 是 ES2025 引入的标准化全局属性,统一指向各环境(浏览器 window、Node.js global、Web Worker self)的全局对象,解决跨平台环境检测难题,支持严格模式与模块作用域,需注意兼容性并推荐 polyfill 降级。
globalThis 是 JavaScript 中一个标准化的全局属性,它始终指向当前执行环境的全局对象。它的核心价值在于——用同一个名字,安全访问任何环境下的全局对象,无需再为浏览器(window)、Node.js(global)、Web Worker(self)或旧版 IE(frameElement等)写条件判断。
在 ES2025 之前,不同运行环境使用不同的全局对象引用:
window
global
self
this 不再指向全局对象,而是 undefined
这导致跨平台库(如 polyfill、工具函数)必须写一堆环境检测逻辑,既繁琐又容易出错。globalThis 就是为终结这种碎片化而生的标准方案。
它不是变量,也不是语法关键字,而是一个只读属性,存在于所有合规的 JavaScript 环境中(ES2025+):
globalThis === window 为 true
globalThis === global 为 true
globalThis === self 为 true
直接访问即可,但要注意兼容性与降级策略:
ES2025):直接用 globalThis.MyLib = {...} 挂载全局工具const safeGlobal = globalThis || self || window || global;
不过更推荐使用 polyfill(如 core-js 提供的),它会在不支持的环境中自动补全 globalThis 定义。
常见于需要操作全局环境的底层代码中:
globalThis.Promise ??= MyPolyfillPromise;
if (!globalThis.AbortController) { ... }
globalThis.myUtility = utilityFn;
this 绑定陷阱:在箭头函数或严格模式下,不再依赖 this 获取全局对象