JavaScript 是一门动态语言,在开发过程中经常需要处理各种各样的数据类型和数据结构。ES11(也称为 ECMAScript 2020)是 JavaScript 的最新版本,它增加了一些新的函数,帮助开发者更加高效地处理数据。本文将介绍 ES11 中的 8 个新函数,它们可以帮助你提高代码质量。
1. 可选链操作符(Optional Chaining Operator)
可选链操作符(?.
)是一个非常有用的新特性,它使得访问对象属性时可以避免出现 TypeError: Cannot read property 'xxx' of undefined
的错误。在访问对象的某个属性时,如果这个属性不存在,那么返回值将是 undefined
,而不会抛出异常。
示例代码:
-- -------------------- ---- ------- ----- ---- - - ----- -------- -------- - ------- ---- ---- ---- ----- ---------- ------ ----- ---- ------- - -- ---------------------------------- -- ------ ---- -- ----------------------------------- -- ------------ -------------------------------- -- ------------
2. 空值合并操作符(Nullish Coalescing Operator)
空值合并操作符(??
)是一个用于处理空值的新特性,它会判断某个值是否为 null
或 undefined
,如果是,就返回一个默认值,否则返回该值本身。
示例代码:
-- -------------------- ---- ------- ----- - - ----- ----- - - ---------- ----- - - ------ ----- - - -- ----- - - --- ------------- -- ----------- -- ---------- ------------- -- ----------- -- ---------- ------------- -- ----------- -- -------- ------------- -- ----------- -- ---- ------------- -- ----------- -- -----
3. Promise.allSettled()
Promise.allSettled()
函数返回一个 Promise,它会在所有给定的 Promise 都已经被解决或拒绝后,返回一个包含每个 Promise 结果的数组,不管这些 Promise 是否被解决或拒绝。
示例代码:
-- -------------------- ---- ------- ----- -------- - - ---------------------------- --------------------------- ------------------------- ------- -- ---------------------------- ------------- -- --------------------- ------------ -- ----------------------
输出结果:
[ {"status":"fulfilled","value":"resolved"}, {"status":"rejected","reason":"rejected"}, {"status":"fulfilled","value":"resolved again"} ]
4. Promise.any()
Promise.any()
函数返回一个 Promise,它会在任意一个给定的 Promise 被解决后立即返回该 Promise 的结果。如果所有 Promise 都被拒绝,则返回一个 AggregateError,其中包含所有 Promise 的拒绝原因。
示例代码:
-- -------------------- ---- ------- ----- -------- - - --------------------------- ---------------------------- ------------------------ ------- -- --------------------- ------------ -- -------------------- ------------ -- ----------------------
输出结果:
resolved
5. String.prototype.matchAll()
String.prototype.matchAll()
函数返回一个迭代器,它包含所有与正则表达式匹配的字符串及其捕获组。与 String.prototype.match()
不同的是,它会返回所有匹配项,而不仅仅是第一个匹配项。
示例代码:
const regex = /t(e)(st(\d?))/g; const str = 'test1test2test3'; for (const match of str.matchAll(regex)) { console.log(match); }
输出结果:
-- -------------------- ---- ------- - -------- ---- ------ ---- ------ -- ------ ------------------ ------- --------- - - -------- ---- ------ ---- ------ -- ------ ------------------ ------- --------- - - -------- ---- ------ ---- ------ --- ------ ------------------ ------- --------- -
6. String.prototype.replaceAll()
String.prototype.replaceAll()
函数用于将字符串中所有匹配某个正则表达式或字符串的子串替换为新的子串。与 String.prototype.replace()
不同的是,它会替换所有匹配项,而不仅仅是第一个匹配项。
示例代码:
const str = 'hello world'; const newStr = str.replaceAll('l', 'L'); console.log(newStr); // 输出:heLLo worLd
7. ArrayBuffer.transfer()
ArrayBuffer.transfer()
函数用于将一个 ArrayBuffer 的内容转移到一个新的 ArrayBuffer 中。它会将源 ArrayBuffer 的内容复制到目标 ArrayBuffer 中,并返回一个新的 ArrayBuffer。
示例代码:
-- -------------------- ---- ------- ----- ------ - --- ---------------- ----- ------ - --- --------------- ------------------------------- -- ----- ------------------------------- -- ---- ---------------------------- -------- ------------------------------- -- ---- ------------------------------- -- -----
8. WeakRefs
WeakRefs
是一种新的引用类型,它可以在不影响垃圾回收的情况下跟踪对象的引用。与 WeakMap
类似,它使用弱引用,因此当对象不再被引用时,它会自动被垃圾回收。
示例代码:
let obj = { name: 'Alice' }; const ref = new WeakRef(obj); console.log(ref.deref()); // 输出:{ name: 'Alice' } obj = null; console.log(ref.deref()); // 输出:null
结论
ES11 新增的这些函数可以帮助开发者更加高效地处理数据,提高代码质量。其中,可选链操作符和空值合并操作符是最常用的新特性,它们可以避免很多常见的错误。如果你正在使用 ES11,不妨尝试使用这些新函数,相信它们会让你的代码变得更加简洁、易读和可维护。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6760f4ad03c3aa6a56077238