在前端开发中,我们经常需要使用一些全局对象,例如 window
、document
、navigator
等等。在 ES12 中,引入了一个新的全局对象 globalThis
,同时也对其他全局对象进行了一些改进和增强。
globalThis
globalThis
是 ES12 中引入的一个新的全局对象,它的作用是提供一个标准的、跨平台的方式来访问全局对象。在不同的平台和环境中,全局对象的名称可能不同,例如在浏览器中,全局对象为 window
,而在 Node.js 中,全局对象为 global
。使用 globalThis
可以屏蔽这些差异,使得我们的代码可以在不同的环境中运行。
下面是一个使用 globalThis
的示例代码:
if (typeof globalThis.setTimeout === 'function') { globalThis.setTimeout(() => { console.log('Hello, world!'); }, 1000); }
在上面的代码中,我们使用 globalThis
来访问全局的 setTimeout
函数,这样我们的代码可以在不同的环境中运行,而不需要担心全局对象的名称不同。
其他全局对象的改进和增强
除了 globalThis
,ES12 还对其他全局对象进行了一些改进和增强,下面分别介绍。
Math
在 ES12 中,新增了一些数学函数,例如 Math.scale
、Math.remap
、Math.clamp
等等。这些函数可以帮助我们更方便地进行数值计算。
下面是一个使用 Math.scale
函数的示例代码:
const x = 5; const y = Math.scale(x, 0, 10, 0, 100); console.log(y); // 50
在上面的代码中,我们使用 Math.scale
函数将变量 x
的值从区间 [0, 10] 映射到了区间 [0, 100],结果为 50。
String
在 ES12 中,新增了一些字符串函数,例如 String.prototype.replaceAll
、String.prototype.trimStart
、String.prototype.trimEnd
等等。这些函数可以帮助我们更方便地进行字符串操作。
下面是一个使用 String.prototype.replaceAll
函数的示例代码:
const str = 'Hello, world!'; const newStr = str.replaceAll('o', '0'); console.log(newStr); // Hell0, w0rld!
在上面的代码中,我们使用 String.prototype.replaceAll
函数将字符串中的所有字符 'o' 替换为 '0',得到了新的字符串。
Promise
在 ES12 中,对 Promise 进行了一些改进和增强,例如新增了一个 Promise.any
方法,用于在多个 Promise 中选择最快完成的一个。
下面是一个使用 Promise.any
方法的示例代码:
const p1 = new Promise(resolve => setTimeout(resolve, 1000, 'one')); const p2 = new Promise(resolve => setTimeout(resolve, 2000, 'two')); const p3 = new Promise(resolve => setTimeout(resolve, 3000, 'three')); Promise.any([p1, p2, p3]).then(value => { console.log(value); // one });
在上面的代码中,我们使用 Promise.any
方法在多个 Promise 中选择最快完成的一个,并输出其结果。
总结
ES12 中引入了一个新的全局对象 globalThis
,可以提供一个标准的、跨平台的方式来访问全局对象。同时,ES12 还对其他全局对象进行了一些改进和增强,例如新增了一些数学函数、字符串函数和 Promise 方法,可以帮助我们更方便地进行数值计算、字符串操作和异步编程。这些改进和增强可以提高我们的开发效率,同时也有助于我们编写更加优雅和简洁的代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65c1cb32add4f0e0ffbcc197