随着 JavaScript 语言不断的发展和演进,越来越多的特性和语法得到不断的引入和支持,其中全局对象(Global Object)是一个非常重要且常用的概念,而在 ES10 中,新增了一个全局对象 globalThis,用于解决跨平台,跨环境下,获取全局对象的问题。
什么是全局对象
全局对象是指在任何位置都可以访问到的对象,在浏览器中,全局对象就是 window 对象,而在 Node.js 环境下,全局对象就是 global 对象,这些都是大家非常熟悉的。全局对象提供了很多常用的方法和属性,如 setTimeout、setInterval、Math 等等。
为什么需要全局对象 globalThis
在今天的开发中,我们经常会遇到跨平台、跨环境等问题,比如我们在页面中通过 iframe 引入第三方库,第三方库中也需要使用全局对象,但是它在不同平台和环境中的名字并不一样,如:
- 浏览器中为 window
- Node.js 中为 global
- Web Worker 中为 self
- Service Worker 中为 self
- iframe 中为 window
这样的话,我们在不同的环境中使用相同的代码时,需要手动判断当前环境使用哪个全局对象,这会导致我们的代码非常繁琐,而全局对象 globalThis 就是为了解决这个问题的。
如何使用全局对象 globalThis
我们可以通过以下方式来获取全局对象 globalThis:
-- -------------------- ---- ------- ----- --------- - -------- -- - -- ------- ---- --- ------------ - ------ ----- - -- ------- ------ --- ------------ - ------ ------- - -- ------- ------ --- ------------ - ------ ------- - ----- --- ------------------ - ----- ---------- - ------------
我们可以看到,在获取 globalThis 这个全局对象时,首先判断了 self、window、global 几个对象是否存在,最终通过 getGlobal 函数获取正确的全局对象。
我们还可以通过以下方式来检测当前代码是否运行在全局对象 globalThis 中:
if (this === globalThis) { console.log('代码正在全局对象 globalThis 中运行'); } else { console.log('代码并未正在全局对象 globalThis 中运行'); }
示例代码
-- -------------------- ---- ------- -- ------ ----- --------- - -------- -- - -- ------- ---- --- ------------ - ------ ----- - -- ------- ------ --- ------------ - ------ ------- - -- ------- ------ --- ------------ - ------ ------- - ----- --- ------------------ - ----- ---------- - ------------ -- ----------- ---------- - -- ----- --- ----------- - --------------------- ---------- ------ - ---- - ----------------------- ---------- ------ - -- ------ ---------- ------------------------ -- - ----------------------- ------- -- ------ ---------------------- -------------------
总结
全局对象是 JavaScript 开发中非常常见的概念,而全局对象 globalThis 的出现,解决了跨平台、跨环境下获取全局对象的问题,也大大简化了开发者的代码编写。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649eb36c48841e9894b3f11b