随着互联网和移动互联网的发展,前端技术越来越成为互联网行业的中流砥柱之一,而 JavaScript 作为前端开发的重要语言,在不断地更新和发展。而今年最新的 ECMAScript 2021 正式发布,更是带来了一些有趣和实用的新特性,本文将为大家揭示这些新特性。
更方便的 Promise 处理
Promise 作为 JavaScript 中处理异步编程的一个重要类型,从 ES6 开始就被广泛使用。而 ECMAScript 2021 中加入了两个新的方法,更方便我们操作 Promise:
Promise.any()
方法:当一个 Promise 数组中,有一个成为 resolve 状态时,返回该 Promise,否则会抛出 AggregateError 错误,可以用来快速实现接口请求等场景。
-- -------------------- ---- ------- ------------- ------------------ ------------------- ----------------- -------------- -- - -------------------- -- - -------------- -- - ------------------- -- --------------- --- -------- ---- -------- ---
Promise.allSettled()
方法:等待传入的所有 Promise 都达到 settle 状态才会返回结果,可以用来快速实现数据请求。
const p1 = new Promise((resolve, reject) => setTimeout(resolve, 1000)); const p2 = Promise.reject({ message: 'there was an error' }); const p3 = Promise.resolve({ message: 'everything went fine' }); Promise.allSettled([p1, p2, p3]) .then(results => results.forEach(result => console.log(result.status))) .catch(error => console.log(error)); // { status: 'fulfilled', value: undefined }, { status: 'rejected', reason: { message: 'there was an error' } }, { status: 'fulfilled', value: { message: 'everything went fine' } }
更精准的数字计算
在 JavaScript 中,浮点数计算一直存在精度问题,特别是财务系统等场景下计算准确性要求更高。而 ECMAScript 2021 中引入的新特性 Math.seededRandom()
可以使用传入的种子参数产生可重复且均匀分布的随机数,方便计算和测试。
console.log(Math.seededRandom(1)); // 0.025202555087292342 console.log(Math.seededRandom(1)); // 0.025202555087292342 console.log(Math.seededRandom(2)); // 0.8474337369372327 console.log(Math.seededRandom(2)); // 0.8474337369372327
此外,对于数学运算,ECMAScript 2021 提供了 Math.fround()
方法,可以将浮点数转换为与该数最接近的单精度浮点数(32 位),提高了数字精确度。
console.log(Math.fround(1.23)); // 1.2300000190734863 console.log(Math.fround(1.5)); // 1.5
更优雅的类型判断
在前端开发中,需要对数据类型判断的场景很多,比如判断一个变量是否为数组、对象等,而我们通常会使用 typeof
或 instanceof
等方式来实现。但是,它们都会存在一些特殊情况下的缺陷。 在 ECMAScript 2021 中,新增了 Number.isInteger()
, Number.isBigInt()
, String.prototype.startsWith()
, String.prototype.endsWith()
等方法来解决类型判断问题,不仅规范,而且较为准确。
console.log(Number.isInteger(42)); // true console.log(Number.isInteger(42.0)); // true console.log(Number.isInteger(42.1)); // false console.log(Number.isBigInt(BigInt("42"))); // true console.log('hello world'.startsWith('hello')); // true console.log('hello world'.endsWith('d')); // true
总结
ECMAScript 2021 中带来了很多有趣和实用的新特性,无论从学习上还是应用上,都有着较大的指导意义。而在日常开发中,我们也应该不断地学习和掌握新的技术和特性,以更好地提升自己和产品的质量。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6460b389968c7c53b0256d79