ES11 中的 globalThis 属性的实际用途

阅读时长 3 分钟读完

globalThis 属性是 ES11 (ECMAScript 2020)中新增的全局属性,它是一个“global”对象的严格平台无关的访问方式,可以在任何环境使用。在浏览器端是 window,Node.js 中是 global,web worker 中是 self,而在不同的环境下可能还会有其他的实现。相比于直接使用 window,global 等全局对象,globalThis 更为通用,也更符合语言的设计哲学:JavaScript 是一门语言,而不是属于某个平台的技术。

globalThis 的实际用途

  1. 更安全的跨平台实现

在运行 JavaScript 的不同平台中,全局变量和函数的实现方式可能不同,导致代码与平台紧密耦合,难以移植。使用 globalThis 可以将代码与特定平台解耦,同时确保代码在不同平台上的行为保持一致,并且可以在不同平台间方便地共享代码。

  1. 异步编程

在 JavaScript 中,异步编程是非常重要的。例如,当我们需要在定时器、事件回调等异步场景中访问全局变量时,使用 globalThis 可以保证正确性。在以前的实现中,由于不同环境下全局对象的名字可能不同,我们需要进行不同环境下的判断和处理。

  1. 测试

全局对象的名称在不同环境下经常发生改变,这给 JavaScript 的测试带来了问题。在不同的环境下测试时,我们需要编写特定的代码来处理不同环境下的全局变量,这使得代码更难以维护。使用 globalThis 可以将测试用例缩减到最小,因为 globalThis 始终指向全局作用域。

globalThis 的使用方法

在使用 globalThis 时,我们只需要使用全局对象的属性或方法名称即可。例如,访问全局对象或全局变量,可以使用以下代码:

这段代码使用了 globalThis 对象的 console 属性,无论在什么环境中,我们都能访问 console 对象。

示例代码

下面是一个从全局作用域中读取数据的代码示例:

在这个示例中,我们使用 globalThis 对象和方括号表示法来从全局作用域中读取数据。

结论

globalThis 是一种通用的全局对象访问方式,可以在不同环境下保持一致。使用它可以帮助我们更轻松地移植代码、更好地处理异步编程和更好地进行测试。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f278daa44b36ee5766065f

纠错
反馈