在 ES11 中,新增了一个全局对象 globalThis,它代表当前的全局作用域,可以用于跨平台编写代码,简化了对全局对象的引用方式。
为什么需要 globalThis 对象
在浏览器、Node.js、Web Worker 等不同 JavaScript 运行环境中,使用全局对象的方式有所不同。比如在浏览器中,全局对象是 window,但在 Web Worker 中,全局对象则是 self。
为了实现跨平台编写代码,需要手动判断当前的运行环境,并使用相应的全局对象。
-- ------- ------ --- ------------ - -- ------ - ---- -- ------- ---- --- ------------ - -- --- ------ --- - ---- -- ------- ------ --- ------------ - -- ------- --- - ---- - ----- --- ---------- ---------- ------- -
这样的写法非常繁琐,且容易出错。而 globalThis 对象就是为了解决这个问题而诞生的。
使用 globalThis 对象
globalThis 对象提供了一个统一的全局变量访问方式,可以在任何 JavaScript 运行环境下使用。不管是在浏览器、Node.js 还是 Web Worker 中,都可以通过 globalThis 来访问全局对象。
------------------------
上述代码在浏览器中运行将输出 window,而在 Node.js 中运行将输出 global。这样就可以避免手动判断运行环境并使用相应的全局变量了。
------------------------- ------- ------------------------- - ---------- - --- --
另外,如果存在其他全局对象的别名,如 self 或 frames,globalThis 也会指向这些对象。
注意事项
尽管 globalThis 对象可以统一不同 JavaScript 运行环境下的全局变量访问方式,但仍需注意一些事项。
首先,globalThis 对象并不是所有 JavaScript 运行环境都支持的,一些旧版本的浏览器、Node.js 等可能不支持 globalThis 对象。此时,需要使用 polyfill 或其他的 hack 方法来解决兼容性问题。
其次,部分全局变量可能和 globalThis 对象中的变量名不一致,需要根据运行环境进行调整。
-- ------- ------ --- ------------ - ----------------- - ------- - ---- -- ------- ---- --- ------------ - --------------- - ----- - ---- -- ------- ------ --- ------------ - ----------------- - ------- - ---- - ----- --- ---------- ---------- ------- -
总结
ES11 中新增的 globalThis 对象可以优雅地解决 JavaScript 不同运行环境下全局变量的访问问题,避免了手动判断运行环境并使用相应的全局变量的繁琐写法。但需要注意一些兼容性和命名上的问题。在跨平台编写代码时,可以考虑使用 globalThis 对象来提高代码的简洁性和可读性。
参考代码:
-- ------- ---------- --- ------------ - -- ------- -- ------- ------ --- ------------ - ----------------- - ------- - ---- -- ------- ---- --- ------------ - --------------- - ----- - ---- -- ------- ------ --- ------------ - ----------------- - ------- - ---- - ----- --- ---------- ---------- ------- - -
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64e19e17f6b2d6eab3cccce8