推荐答案
ES13(ES2022)中新增的主要特性包括:
- Top-level
await
:允许在模块的顶层使用await
,无需包裹在async
函数中。 - Class Field Declarations:支持在类中直接声明字段,无需在构造函数中初始化。
- Private Methods and Fields:支持在类中定义私有方法和字段,使用
#
前缀。 - Static Class Fields and Methods:支持在类中定义静态字段和方法。
- Ergonomic Brand Checks for Private Fields:提供更简洁的方式来检查私有字段是否存在。
- Array.prototype.at():允许通过索引访问数组元素,支持负索引。
- Object.hasOwn():提供更简洁的方式来检查对象是否拥有某个属性。
- Error Cause:允许在创建错误时指定原因,便于调试。
本题详细解读
1. Top-level await
在 ES13 之前,await
只能在 async
函数中使用。ES13 允许在模块的顶层直接使用 await
,简化了异步代码的编写。
-- -------------------- ---- ------- -- ---- -- ------ ---------- - ----- -------- - ----- -------------------------------------- ---------------------- ----- -- ---- ----- -------- - ----- -------------------------------------- ----------------------
2. Class Field Declarations
ES13 允许在类中直接声明字段,无需在构造函数中初始化。
class MyClass { myField = 42; }
3. Private Methods and Fields
ES13 引入了私有方法和字段,使用 #
前缀表示。
class MyClass { #privateField = 42; #privateMethod() { return this.#privateField; } }
4. Static Class Fields and Methods
ES13 支持在类中定义静态字段和方法。
class MyClass { static myStaticField = 42; static myStaticMethod() { return this.myStaticField; } }
5. Ergonomic Brand Checks for Private Fields
ES13 提供了更简洁的方式来检查私有字段是否存在。
class MyClass { #privateField; static hasPrivateField(instance) { return #privateField in instance; } }
6. Array.prototype.at()
Array.prototype.at()
方法允许通过索引访问数组元素,支持负索引。
const array = [1, 2, 3]; console.log(array.at(-1)); // 输出 3
7. Object.hasOwn()
Object.hasOwn()
方法提供更简洁的方式来检查对象是否拥有某个属性。
const obj = { foo: 'bar' }; console.log(Object.hasOwn(obj, 'foo')); // 输出 true
8. Error Cause
ES13 允许在创建错误时指定原因,便于调试。
try { throw new Error('Something went wrong', { cause: 'Invalid input' }); } catch (error) { console.log(error.cause); // 输出 'Invalid input' }