ES11 和 ES12 都是 JavaScript 的新版本,它们分别于 2020 年和 2021 年发布。本文将介绍 ES11 和 ES12 的主要区别,并提供示例代码和指导意义。
ES11 新特性
1. 可选链操作符(Optional chaining operator)
可选链操作符 ?.
可以在访问嵌套对象时避免出现 undefined
错误。例如,如果要访问 person.address.city
,但是 person
或 address
为 undefined
,则会出现错误。使用可选链操作符可以避免这种情况:
const city = person?.address?.city;
2. 空值合并操作符(Nullish coalescing operator)
空值合并操作符 ??
可以在变量为 null
或 undefined
时返回默认值。例如:
const name = person.name ?? 'Unknown';
如果 person.name
为 null
或 undefined
,则 name
的值为 'Unknown'
。
3. Promise.allSettled()
Promise.allSettled() 方法返回一个 Promise,该 Promise 在所有 Promise 已解决或已拒绝时解决,并返回一个对象数组,该数组包含每个 Promise 的结果或原因。例如:
-- -------------------- ---- ------- ----- -------- - - ------------------- ------------------------ ------------------ -- ----------------------------------------- -- - --------------------- ---
输出结果如下:
[ { status: 'fulfilled', value: 1 }, { status: 'rejected', reason: 'Error' }, { status: 'fulfilled', value: 3 } ]
4. String.prototype.replaceAll()
String.prototype.replaceAll() 方法可以替换字符串中的所有匹配项。例如:
const str = 'Hello World'; const newStr = str.replaceAll('l', 'L'); console.log(newStr); // 'HeLLo WorLd'
5. 新的正则表达式特性
ES11 引入了几个新的正则表达式特性,包括 /(?<name>group)/
命名捕获组、/s
模式修饰符、以及 String.prototype.matchAll()
方法。
ES12 新特性
1. Promise.any()
Promise.any() 方法返回一个 Promise,该 Promise 在任何一个 Promise 已解决时解决,并返回该 Promise 的结果。如果所有 Promise 都被拒绝,则返回一个 AggregateError 对象,该对象包含所有 Promise 的原因。例如:
-- -------------------- ---- ------- ----- -------- - - --------------------- ---- ------------------- --------------------- --- -- --------------------------------- -- - -------------------- -- - -------------- -- - ------------------- -- --------------- --- -------- ---- -------- ---
2. WeakRef 和 FinalizationRegistry
WeakRef 和 FinalizationRegistry 是两个新的 JavaScript API,它们可以帮助开发者更好地管理内存。WeakRef 可以创建一个弱引用,FinalizationRegistry 可以在对象被垃圾回收时执行回调函数。例如:
-- -------------------- ---- ------- --- --- - - ----- ------ -- ----- --- - --- ------------- --- - ----- -- ----- ----- -------- - --- ------------------------ -- - ------------------- ---- --- ------ --- ---- ------- ------------ --- ---------------------- --------- -- ---------
3. 数字分隔符
ES12 引入了数字分隔符 _
,可以在数字中间插入分隔符以提高可读性。例如:
const number = 1_000_000; console.log(number); // 1000000
4. 私有字段和方法
ES12 引入了私有字段和方法的语法。使用 #
前缀可以将字段和方法声明为私有的。例如:
-- -------------------- ---- ------- ----- ------ - ------ ----------------- - ---------- - ----- - ---------------- - ----------------- -- - ------- --------- - ---------- - ------------------- -- ---- -- ---------------- ---------------------- - - ----- ------ - --- --------------- ------------------ -- ------ -- ---- -- ----
总结
ES11 和 ES12 带来了许多有用的新特性,包括可选链操作符、空值合并操作符、Promise.allSettled()、Promise.any()、WeakRef 和 FinalizationRegistry、数字分隔符以及私有字段和方法。这些新特性可以提高开发效率、减少代码错误,并且更好地管理内存。开发者应该积极学习并使用这些特性,以提高自己的 JavaScript 技能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/662a0161c9431a720c7967c0