前言
随着 JavaScript 的发展和普及,前端开发的领域也越来越广泛,而全局对象是 JavaScript 中最基础的概念之一。现在的 JavaScript 标准已经发展到了 ES11,而在这个版本中,我们将会看到一个新的全局对象 —— globalThis。
本文将会详细介绍 globalThis 对象的概念、特点、用法以及在浏览器和 Node.js 中的使用方法,帮助读者更好地理解和应用 globalThis 对象。
概念
globalThis 是 ES11 新增的全局对象,它的作用是提供一种跨平台的访问全局对象的方式。以前我们在浏览器中通过 window 对象、在 Node.js 中通过 global 对象来访问全局对象,这样不够方便且不跨平台。
globalThis 对象相当于一种新的跨平台的全局命名空间,可以通过它来获取和设置全局对象。
特点
相较于之前的全局对象,globalThis 更加稳定,因为它可以在不同的环境下被访问到,同时也不需要关心代码在哪个环境中运行。
从 ES11 开始,每一个 JavaScript 环境(浏览器、Node.js、Web Worker 等)都需要支持 globalThis 对象,这使得 globalThis 成为了 JavaScript 中的一个重要的全局对象。
用法
globalThis 对象有一个简单的用法,就是用来访问全局对象。比如,获取全局对象的最佳方式是使用以下代码:
const globalObj = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};
这句代码的意思是:获取全局对象,如果当前环境中没有 globalThis 对象,则判断是否有 self 对象,如果再没有则判断是否有 window 对象,最后创建一个空对象作为全局对象。
如果当前环境中存在 globalThis 对象,则可以直接使用以下代码获取:
const globalObj = globalThis;
在使用 globalThis 对象时,需要注意一个问题:在某些环境中,比如 Chrome 中,globalThis 对象所指向的 window 对象不是顶层的 window,而是一个特定的沙盒对象。
在这种情况下,可以通过以下代码来检查 globalThis 是否是顶层的 window 对象:
const isTopLevelWindow = globalThis.window === globalThis;
在浏览器中使用 globalThis
在浏览器中,globalThis 对象所表示的就是顶层的 window 对象。在 JavaScript 的前端开发中,访问 window 对象可以说是家常便饭。
比如,我们可以通过以下代码访问浏览器窗口的大小:
const width = globalThis.innerWidth; const height = globalThis.innerHeight; console.log(`宽度:${width},高度:${height}`);
在处理跨浏览器的事件绑定时也可以使用 globalThis 对象,比如:
const eventName = globalThis.document && globalThis.document.documentElement.clientWidth < 740 ? 'touchstart' : 'click'; globalThis.addEventListener(eventName, function() { console.log("click"); });
在 Node.js 中使用 globalThis
在 Node.js 中,globalThis 对象所表示的是全局的命名空间,比如每个 Node.js 模块都在其自身的模块作用域中执行,使用 globalThis 对象可以访问该模块的全局作用域。
可以通过以下代码来访问 Node.js 全局变量:
const process = globalThis.process; console.log(process.version);
在全局作用域中使用 globalThis 对象,代码如下:
// index.js globalThis.foo = "bar"; // app.js console.log(globalThis.foo);
总结
通过本文,我们了解了 ES11 的 globalThis 对象的概念、特点和用法,并详细介绍了在浏览器和 Node.js 中使用 globalThis 对象的方法,希望读者对这个新的全局对象有更深入的了解。
globalThis 对象是一个跨环境的全局对象,它使得 JavaScript 中的全局命名空间变得更加稳定和可靠。在实际开发中,我们可以使用 globalThis 对象来访问当前环境的全局变量和对象,帮助我们更方便地编写跨平台的 JavaScript 代码。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653f6cae7d4982a6eb8fb68f