随着 JavaScript 的不断发展和演进,ECMAScript 2021 标准引入了全局对象 globalThis,它为开发者提供了一种跨环境获取全局对象的方式,从而更简单地编写跨平台的代码。
globalThis 是什么
在 JavaScript 中,全局对象是一个特殊的对象。它是所有全局变量和函数的宿主,同时也包含了一些 JavaScript 内置对象和函数。在浏览器端,全局对象是 window;在 Node.js 环境中,它是 global。这两个对象都有一些自身属性和方法,但是它们也有一些不同的属性,这是因为它们所属的环境有所不同。
ECMAScript 2021 引入了全局对象 globalThis,它是一个标准中定义的新全局对象。globalThis 可以在任何环境中获取全局对象,它是一个通用的全局对象标识符。这个对象可以帮助我们更方便地实现平台无关的代码,例如在跨平台(如浏览器和 Node.js)的开发中,使用一个统一的全局对象来访问和控制。
globalThis 的使用
使用 globalThis 的方式和在浏览器中使用 window 或在 Node.js 环境中使用 global 一样简单。只需在全局范围内使用 globalThis,就可以获取到当前环境下的全局对象。
// 在浏览器中 console.log(globalThis === window); // true // 在 Node.js 环境中 console.log(globalThis === global); // true
使用 globalThis 的方式比访问特定全局对象(如 window 或 global)更通用。这使得在跨平台环境中编写代码更加容易。
// 在浏览器和 Node.js 中都可以使用 if (typeof globalThis.setTimeout === 'function') { globalThis.setTimeout(() => { console.log('Hello, world!'); }, 1000); }
globalThis 的应用场景
globalThis 可以帮助我们更方便地编写跨平台的代码,例如一个库应该在浏览器和服务器端都可以使用。在这种情况下,我们无法仅仅使用全局对象 window 或 global,因为它只存在于一个特定的环境中。替代方案是使用 globalThis,因为它在所有环境中都存在,可以方便跨平台使用。
function showMessage(message) { // 在任何环境中都可以使用 globalThis.alert(message); } showMessage('Hello, world!');
globalThis 也可以用来为当前环境中的全局对象添加扩展。比如,我们可以为所有环境中的全局对象添加一个新的属性或方法。
// 在任何环境中都添加一个新的方法 globalThis.sayHello = function () { console.log('Hello, world!'); }; globalThis.sayHello(); // Hello, world!
总结
ECMAScript 2021 中引入的全局对象 globalThis 可以方便地实现平台无关的代码编写,同时也为当前环境的全局对象添加了扩展和增强的能力。使用 globalThis,我们可以更加方便地实现跨平台开发,同时也为未来的代码维护和升级提供了更加可靠的基础。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6641aff7d3423812e4fae8d4