自从 JavaScript 诞生以来,它一直有一个问题:如何获取全局对象?在浏览器平台上,全局对象是 window
,但在 Node.js 中,全局对象是 global
。这对于开发者来说是一个麻烦,因为要编写跨平台代码时需要编写条件语句以区分不同的全局对象。
ES11 新增了一个标准的全局对象 —— globalThis
。globalThis
通过统一了全局对象的访问方式并将其定义为标准的全局变量,使得跨平台代码的编写变得更加容易。
globalThis
是什么?
globalThis
是一个全局对象,可以在任何环境中使用。它是 JavaScript 语言规范中新增的,与 window
和 global
对象等同。使用 globalThis
替代 window
或 global
对象,可以让你的代码更具有可移植性。
如何使用 globalThis
?
在浏览器环境中,可以使用 self
或 window
来代替 globalThis
。在 Node.js 环境中,可以使用 global
来代替 globalThis
。
下面是一个简单的示例代码,它使用 globalThis
和条件语句来处理跨平台代码:
const root = typeof self == 'object' && self.self === self && self || typeof global == 'object' && global.global === global && global || this || {}; console.log(root);
这个示例中,root
将保存全局对象,在浏览器环境中为 window
或 self
,在 Node.js 环境中为 global
。在其它运行环境中,它将保存 this
。这个示例可以处理大多数情况下的跨平台代码。
除此之外,globalThis
还有一些内置的属性和方法。这些属性和方法在不同环境下有不同的表现,但使用它们可以使代码更具可移植性。例如,在 Node.js 中,process
对象是全局对象之一,而在浏览器中,则没有这个对象。使用 globalThis.process
可以确保你的代码能够在不同的环境中运行。
总结
globalThis
的出现标准化了 JavaScript 的全局对象,并使得跨平台代码的编写更加容易。通过使用 globalThis
,你可以避免编写条件语句来判断不同平台上的全局对象,从而使代码更简洁、更具可读性。在实际开发中,你可以将 globalThis
用于处理跨平台问题,同时也可以使用它提供的内置方法和属性来简化代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6481591148841e98940cf4c3