在 ECMAScript 2021 中,JavaScript 引入了一个新的全局对象 globalThis。这个对象提供了一种跨平台的方式来访问全局对象,无论是在浏览器中还是在 Node.js 中,都可以使用相同的代码来访问全局对象。
globalThis 的应用
在过去,访问全局对象的方式因为浏览器和 Node.js 的差异而不同。在浏览器中,全局对象是 window,而在 Node.js 中,全局对象是 global。这意味着如果你想编写可移植的代码,你需要编写不同的代码来访问全局对象。
现在,有了 globalThis,你可以使用相同的代码来访问全局对象,无论你的代码运行在哪个环境中。例如,以下代码将打印出全局对象的类型:
console.log(typeof globalThis);
这段代码将在浏览器和 Node.js 中都能正常运行,并且输出的结果都是 "object"。
globalThis 的参考
globalThis 对象有一些有用的属性和方法,下面是一些例子:
1. globalThis.setTimeout()
setTimeout() 方法是一个全局函数,它允许你在指定的时间后执行一个函数。在浏览器中,这个方法是 window.setTimeout(),而在 Node.js 中,它是 global.setTimeout()。使用 globalThis,你可以在任何环境中使用相同的代码来调用 setTimeout() 方法:
globalThis.setTimeout(() => { console.log("Hello, world!"); }, 1000);
2. globalThis.fetch()
fetch() 方法是一个全局函数,它允许你发起 HTTP 请求并获取响应。在浏览器中,这个方法是 window.fetch(),而在 Node.js 中,它需要使用第三方库。使用 globalThis,你可以在任何环境中使用相同的代码来调用 fetch() 方法:
globalThis.fetch("https://api.github.com/users/octocat") .then(response => response.json()) .then(data => console.log(data));
3. globalThis.console
console 对象是一个全局对象,它提供了一些有用的方法来打印日志和调试信息。在浏览器中,这个方法是 window.console,而在 Node.js 中,它是 global.console。使用 globalThis,你可以在任何环境中使用相同的代码来访问 console 对象:
globalThis.console.log("Hello, world!");
示例代码
下面是一个使用 globalThis 的示例代码,它演示了如何使用相同的代码在浏览器和 Node.js 中获取全局对象:
-- -------------------- ---- ------- ----- --------- - -- -- - -- ------- ---- --- ------------ - ------ ----- - -- ------- ------ --- ------------ - ------ ------- - -- ------- ------ --- ------------ - ------ ------- - ----- --- ------------- -- ------ ------ ---------- -- ----- ------ - ------------ -------------------------- ---------
这段代码将在任何环境中都能正常运行,并且输出的结果都是 "Hello, world!"。
总结
globalThis 是一个非常有用的新特性,它允许你使用相同的代码在不同的环境中访问全局对象。这使得编写可移植的代码变得更加容易,同时也提高了代码的可读性和可维护性。如果你想编写跨平台的 JavaScript 代码,globalThis 将是一个非常有用的工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65dfeff61886fbafa4d257d5