7 новых функций ECMAScript 2022 | Последние функции JavaScript ES13

ECMAScript 2022, 13-я редакция, представила верхний уровень await, позволяющий использовать ключевое слово на верхнем уровне модулей; новые элементы класса: общедоступные и частные поля экземпляра, общедоступные и частные статические поля, частные методы экземпляра и средства доступа, а также частные статические методы и средства доступа; статические блоки внутри классов для выполнения инициализации оценки для каждого класса; синтаксис для #x in objпроверки наличия закрытых полей в объектах; индексы совпадения регулярных выражений с помощью /dфлага, который предоставляет начальные и конечные индексы для совпадающих подстрок; causeсвойство Errorобъектов, которое можно использовать для записи причинно-следственной цепочки ошибок ; метод atдля строк, массивов и типизированных массивов, допускающий относительную индексацию; и Object.hasOwn, удобная альтернатива Object.prototype.hasOwnProperty.

22 июня 2022 года 123-я Генеральная ассамблея Ecma утвердила спецификацию языка ECMAScript 2022, что означает, что теперь он официально является стандартом.

Что нового в ECMAScript 2022 (JavaScript ES13)?  

  1. Новые члены классов
  2. Проверка приватных слотов через оператора in
  3. Ожидание верхнего уровня в модулях
  4. ошибка.причина
  5. Метод .at() индексируемых значений
  6. Индексы соответствия RegExp
  7. Object.hasOwn(obj, propKey)

1 - Новые члены классов

class MyClass {
  instancePublicField = 1;
  static staticPublicField = 2;

  #instancePrivateField = 3;
  static #staticPrivateField = 4;

  #nonStaticPrivateMethod() {}
  get #nonStaticPrivateAccessor() {}
  set #nonStaticPrivateAccessor(value) {}

  static #staticPrivateMethod() {}
  static get #staticPrivateAccessor() {}
  static set #staticPrivateAccessor(value) {}

  static {
    // Static initialization block
  }
}

2 - Проверка приватного слота через inоператора  

Частные слотовые чеки также называют «эргономичными фирменными чеками для частных полей». Следующее выражение является такой проверкой — оно определяет, objесть ли приватный слот #privateSlot:

#privateSlot in obj

Вот пример:

class ClassWithPrivateSlot {
  #privateSlot = true;
  static hasPrivateSlot(obj) {
    return #privateSlot in obj;
  }
}

const obj1 = new ClassWithPrivateSlot();
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj1), true
);

const obj2 = {};
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj2), false
);

3 - Верхний уровень awaitв модулях 

Теперь мы можем использовать awaitмодули на верхних уровнях, и нам больше не нужно вводить асинхронные функции или методы:

// my-module.mjs
const response = await fetch('https://example.com');
const text = await response.text();
console.log(text);

4 -error.cause 

Errorи его подклассы теперь позволяют указать, какая ошибка вызвала текущую:

try {
  // Do something
} catch (otherError) {
  throw new Error('Something went wrong', {cause: otherError});
}

Причина ошибки errотображается в трассировке стека, и к ней можно получить доступ через err.cause.

5 - Метод .at()индексируемых значений 

Метод .at()индексируемых значений позволяет нам читать элемент по заданному индексу (как оператор скобки []) и поддерживает отрицательные индексы (в отличие от оператора скобки):

> ['a', 'b', 'c'].at(0)
'a'
> ['a', 'b', 'c'].at(-1)
'c'

Следующие «индексируемые» типы имеют метод .at():

  • string
  • Array
  • Все классы типизированных массивов: Uint8Arrayи т.д.

6 - Индексы соответствия RegExp

Если мы добавим флаг /dк регулярному выражению, его использование создаст объекты сопоставления, которые записывают начальный и конечный индексы каждого захвата группы (строки A и B):

const matchObj = /(a+)(b+)/d.exec('aaaabb');

assert.equal(
  matchObj[1], 'aaaa'
);
assert.deepEqual(
  matchObj.indices[1], [0, 4] // (A)
);

assert.equal(
  matchObj[2], 'bb'
);
assert.deepEqual(
  matchObj.indices[2], [4, 6] // (B)
);

7 -Object.hasOwn(obj, propKey)

Object.hasOwn(obj, propKey)objпредоставляет безопасный способ проверить, имеет ли объект собственное (не унаследованное) свойство с помощью ключа propKey:

const proto = {
  protoProp: 'protoProp',
};
const obj = {
  __proto__: proto,
  objProp: 'objProp',
}

assert.equal('protoProp' in obj, true); // (A)

assert.equal(Object.hasOwn(obj, 'protoProp'), false); // (B)
assert.equal(Object.hasOwn(proto, 'protoProp'), true); // (C)

Обратите внимание, что inобнаруживаются унаследованные свойства (строка A), а Object.hasOwn()обнаруживаются только собственные свойства (строки B и C).

#javascript #es13 #ecmascript  

What is GEEK

Buddha Community

7 новых функций ECMAScript 2022 | Последние функции JavaScript ES13

7 новых функций ECMAScript 2022 | Последние функции JavaScript ES13

ECMAScript 2022, 13-я редакция, представила верхний уровень await, позволяющий использовать ключевое слово на верхнем уровне модулей; новые элементы класса: общедоступные и частные поля экземпляра, общедоступные и частные статические поля, частные методы экземпляра и средства доступа, а также частные статические методы и средства доступа; статические блоки внутри классов для выполнения инициализации оценки для каждого класса; синтаксис для #x in objпроверки наличия закрытых полей в объектах; индексы совпадения регулярных выражений с помощью /dфлага, который предоставляет начальные и конечные индексы для совпадающих подстрок; causeсвойство Errorобъектов, которое можно использовать для записи причинно-следственной цепочки ошибок ; метод atдля строк, массивов и типизированных массивов, допускающий относительную индексацию; и Object.hasOwn, удобная альтернатива Object.prototype.hasOwnProperty.

22 июня 2022 года 123-я Генеральная ассамблея Ecma утвердила спецификацию языка ECMAScript 2022, что означает, что теперь он официально является стандартом.

Что нового в ECMAScript 2022 (JavaScript ES13)?  

  1. Новые члены классов
  2. Проверка приватных слотов через оператора in
  3. Ожидание верхнего уровня в модулях
  4. ошибка.причина
  5. Метод .at() индексируемых значений
  6. Индексы соответствия RegExp
  7. Object.hasOwn(obj, propKey)

1 - Новые члены классов

class MyClass {
  instancePublicField = 1;
  static staticPublicField = 2;

  #instancePrivateField = 3;
  static #staticPrivateField = 4;

  #nonStaticPrivateMethod() {}
  get #nonStaticPrivateAccessor() {}
  set #nonStaticPrivateAccessor(value) {}

  static #staticPrivateMethod() {}
  static get #staticPrivateAccessor() {}
  static set #staticPrivateAccessor(value) {}

  static {
    // Static initialization block
  }
}

2 - Проверка приватного слота через inоператора  

Частные слотовые чеки также называют «эргономичными фирменными чеками для частных полей». Следующее выражение является такой проверкой — оно определяет, objесть ли приватный слот #privateSlot:

#privateSlot in obj

Вот пример:

class ClassWithPrivateSlot {
  #privateSlot = true;
  static hasPrivateSlot(obj) {
    return #privateSlot in obj;
  }
}

const obj1 = new ClassWithPrivateSlot();
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj1), true
);

const obj2 = {};
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj2), false
);

3 - Верхний уровень awaitв модулях 

Теперь мы можем использовать awaitмодули на верхних уровнях, и нам больше не нужно вводить асинхронные функции или методы:

// my-module.mjs
const response = await fetch('https://example.com');
const text = await response.text();
console.log(text);

4 -error.cause 

Errorи его подклассы теперь позволяют указать, какая ошибка вызвала текущую:

try {
  // Do something
} catch (otherError) {
  throw new Error('Something went wrong', {cause: otherError});
}

Причина ошибки errотображается в трассировке стека, и к ней можно получить доступ через err.cause.

5 - Метод .at()индексируемых значений 

Метод .at()индексируемых значений позволяет нам читать элемент по заданному индексу (как оператор скобки []) и поддерживает отрицательные индексы (в отличие от оператора скобки):

> ['a', 'b', 'c'].at(0)
'a'
> ['a', 'b', 'c'].at(-1)
'c'

Следующие «индексируемые» типы имеют метод .at():

  • string
  • Array
  • Все классы типизированных массивов: Uint8Arrayи т.д.

6 - Индексы соответствия RegExp

Если мы добавим флаг /dк регулярному выражению, его использование создаст объекты сопоставления, которые записывают начальный и конечный индексы каждого захвата группы (строки A и B):

const matchObj = /(a+)(b+)/d.exec('aaaabb');

assert.equal(
  matchObj[1], 'aaaa'
);
assert.deepEqual(
  matchObj.indices[1], [0, 4] // (A)
);

assert.equal(
  matchObj[2], 'bb'
);
assert.deepEqual(
  matchObj.indices[2], [4, 6] // (B)
);

7 -Object.hasOwn(obj, propKey)

Object.hasOwn(obj, propKey)objпредоставляет безопасный способ проверить, имеет ли объект собственное (не унаследованное) свойство с помощью ключа propKey:

const proto = {
  protoProp: 'protoProp',
};
const obj = {
  __proto__: proto,
  objProp: 'objProp',
}

assert.equal('protoProp' in obj, true); // (A)

assert.equal(Object.hasOwn(obj, 'protoProp'), false); // (B)
assert.equal(Object.hasOwn(proto, 'protoProp'), true); // (C)

Обратите внимание, что inобнаруживаются унаследованные свойства (строка A), а Object.hasOwn()обнаруживаются только собственные свойства (строки B и C).

#javascript #es13 #ecmascript  

7 New ECMAScript 2022 Features | The Latest ES13 JavaScript Features

ECMAScript 2022, the 13th edition, introduced top-level await, allowing the keyword to be used at the top level of modules; new class elements: public and private instance fields, public and private static fields, private instance methods and accessors, and private static methods and accessors; static blocks inside classes, to perform per-class evaluation initialization; the #x in obj syntax, to test for presence of private fields on objects; regular expression match indices via the /d flag, which provides start and end indices for matched substrings; the cause property on Error objects, which can be used to record a causation chain in errors; the at method for Strings, Arrays, and TypedArrays, which allows relative indexing; and Object.hasOwn, a convenient alternative to Object.prototype.hasOwnProperty.

On 22 June 2022, the 123nd Ecma General Assembly approved the ECMAScript 2022 language specification, which means that it’s officially a standard now.

What’s new in ECMAScript 2022 (JavaScript ES13)?  

  1. New members of classes
  2. Private slot checks via the in operator
  3. Top-level await in modules
  4. error.cause
  5. Method .at() of indexable values
  6. RegExp match indices
  7. Object.hasOwn(obj, propKey)

1 - New members of classes

class MyClass {
  instancePublicField = 1;
  static staticPublicField = 2;

  #instancePrivateField = 3;
  static #staticPrivateField = 4;

  #nonStaticPrivateMethod() {}
  get #nonStaticPrivateAccessor() {}
  set #nonStaticPrivateAccessor(value) {}

  static #staticPrivateMethod() {}
  static get #staticPrivateAccessor() {}
  static set #staticPrivateAccessor(value) {}

  static {
    // Static initialization block
  }
}

2 - Private slot checks via the in operator  

Private slot checks are also called “ergonomic brand checks for private fields”. The following expression is such a check – it determines if obj has a private slot #privateSlot:

#privateSlot in obj

This is an example:

class ClassWithPrivateSlot {
  #privateSlot = true;
  static hasPrivateSlot(obj) {
    return #privateSlot in obj;
  }
}

const obj1 = new ClassWithPrivateSlot();
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj1), true
);

const obj2 = {};
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj2), false
);

More information on private slot checks.

3 - Top-level await in modules 

We can now use await at the top levels of modules and don’t have to enter async functions or methods anymore:

// my-module.mjs
const response = await fetch('https://example.com');
const text = await response.text();
console.log(text);

More information on top-level await.

4 - error.cause 

Error and its subclasses now let us specify which error caused the current one:

try {
  // Do something
} catch (otherError) {
  throw new Error('Something went wrong', {cause: otherError});
}

The cause of an error err shows up in the stack trace and can be accessed via err.cause.

More information on error.cause.

5 - Method .at() of indexable values 

Method .at() of indexable values lets us read an element at a given index (like the bracket operator []) and supports negative indices (unlike the bracket operator):

> ['a', 'b', 'c'].at(0)
'a'
> ['a', 'b', 'c'].at(-1)
'c'

The following “indexable” types have method .at():

  • string
  • Array
  • All Typed Array classes: Uint8Array etc.

More information on method .at() of indexable values.

6 - RegExp match indices

If we add the flag /d to a regular expression, using it produces match objects that record the start and end index of each group capture (lines A and B):

const matchObj = /(a+)(b+)/d.exec('aaaabb');

assert.equal(
  matchObj[1], 'aaaa'
);
assert.deepEqual(
  matchObj.indices[1], [0, 4] // (A)
);

assert.equal(
  matchObj[2], 'bb'
);
assert.deepEqual(
  matchObj.indices[2], [4, 6] // (B)
);

More information on RegExp match indices.

7 - Object.hasOwn(obj, propKey)

Object.hasOwn(obj, propKey) provides a safe way to check if an object obj has an own (non-inherited) property with the key propKey:

const proto = {
  protoProp: 'protoProp',
};
const obj = {
  __proto__: proto,
  objProp: 'objProp',
}

assert.equal('protoProp' in obj, true); // (A)

assert.equal(Object.hasOwn(obj, 'protoProp'), false); // (B)
assert.equal(Object.hasOwn(proto, 'protoProp'), true); // (C)

Note that in detects inherited properties (line A), while Object.hasOwn() only detects own properties (lines B and C).

More information on Object.hasOwn().

#javascript #es13 #ecmascript #programming 

许 志强

许 志强

1656165600

7 个新的 ECMAScript 2022 功能 | 最新的 ES13 JavaScript 功能

ECMAScript 2022 第 13 版引入了 top-level await,允许在模块的顶层使用关键字;新的类元素:公共和私有实例字段、公共和私有静态字段、私有实例方法和访问器、私有静态方法和访问器;类内的静态块,用于执行每个类的评估初始化;#x in obj语法,用于测试对象上是否存在私有字段;正则表达式通过/d标志匹配索引,该标志为匹配的子字符串提供开始和结束索引;对象的cause属性Error,可用于记录错误的因果链;atStrings、Arrays 和 TypedArrays的方法,它允许相对索引;并且Object.hasOwn,一个方便的替代方案Object.prototype.hasOwnProperty

2022 年 6 月 22 日,第 123 届 Ecma 大会批准了 ECMAScript 2022 语言规范,这意味着它现在正式成为标准。

ECMAScript 2022 (JavaScript ES13) 中有哪些新功能?  

  1. 班级的新成员
  2. 通过 in 运营商进行私人插槽检查
  3. 模块中的顶级等待
  4. 错误原因
  5. 可索引值的方法 .at()
  6. 正则表达式匹配索引
  7. Object.hasOwn(obj, propKey)

1 - 班级的新成员

class MyClass {
  instancePublicField = 1;
  static staticPublicField = 2;

  #instancePrivateField = 3;
  static #staticPrivateField = 4;

  #nonStaticPrivateMethod() {}
  get #nonStaticPrivateAccessor() {}
  set #nonStaticPrivateAccessor(value) {}

  static #staticPrivateMethod() {}
  static get #staticPrivateAccessor() {}
  static set #staticPrivateAccessor(value) {}

  static {
    // Static initialization block
  }
}

in2 - 通过运营商  进行私人插槽检查

私人插槽检查也称为“私人领域的人体工程学品牌检查”。下面的表达式就是这样一种检查——它确定是否obj有一个私有插槽#privateSlot

#privateSlot in obj

这是一个例子:

class ClassWithPrivateSlot {
  #privateSlot = true;
  static hasPrivateSlot(obj) {
    return #privateSlot in obj;
  }
}

const obj1 = new ClassWithPrivateSlot();
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj1), true
);

const obj2 = {};
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj2), false
);

await3 -模块中 的顶级

我们现在可以await在模块的顶层使用,而不必再输入异步函数或方法:

// my-module.mjs
const response = await fetch('https://example.com');
const text = await response.text();
console.log(text);

4 -error.cause 

Error及其子类现在让我们指定哪个错误导致了当前错误:

try {
  // Do something
} catch (otherError) {
  throw new Error('Something went wrong', {cause: otherError});
}

错误的原因err显示在堆栈跟踪中,可以通过err.cause.

5 -.at()可索引值的 方法

可索引值的方法.at()让我们可以读取给定索引处的元素(如括号运算符[])并支持负索引(与括号运算符不同):

> ['a', 'b', 'c'].at(0)
'a'
> ['a', 'b', 'c'].at(-1)
'c'

以下“可索引”类型具有方法.at()

  • string
  • Array
  • 所有类型化数组类:Uint8Array等。

6 - RegExp 匹配索引

如果我们将标志添加/d到正则表达式,使用它会生成匹配对象,记录每个组捕获的开始和结束索引(A 行和 B 行):

const matchObj = /(a+)(b+)/d.exec('aaaabb');

assert.equal(
  matchObj[1], 'aaaa'
);
assert.deepEqual(
  matchObj.indices[1], [0, 4] // (A)
);

assert.equal(
  matchObj[2], 'bb'
);
assert.deepEqual(
  matchObj.indices[2], [4, 6] // (B)
);

7 -Object.hasOwn(obj, propKey)

Object.hasOwn(obj, propKey)提供了一种安全的方法来检查对象obj是否具有自己的(非继承的)属性和 key propKey

const proto = {
  protoProp: 'protoProp',
};
const obj = {
  __proto__: proto,
  objProp: 'objProp',
}

assert.equal('protoProp' in obj, true); // (A)

assert.equal(Object.hasOwn(obj, 'protoProp'), false); // (B)
assert.equal(Object.hasOwn(proto, 'protoProp'), true); // (C)

请注意,in检测继承的属性(行 A),而Object.hasOwn()仅检测自己的属性(行 B 和 C)。

#javascript  #es13  #ecmascript  #programming 

Hoang  Kim

Hoang Kim

1656172800

7 Tính Năng Mới Của ECMAScript 2022 | Các Tính Năng JavaScript ES13

ECMAScript 2022, ấn bản thứ 13, giới thiệu cấp cao nhất await, cho phép sử dụng từ khóa ở cấp cao nhất của các mô-đun; các phần tử lớp mới: trường cá thể công khai và riêng tư, trường tĩnh công khai và riêng tư, phương thức và trình truy cập cá thể cá nhân cũng như các phương thức và trình truy cập tĩnh riêng tư; các khối tĩnh bên trong các lớp, để thực hiện khởi tạo đánh giá mỗi lớp; cú #x in objpháp, để kiểm tra sự hiện diện của các trường riêng tư trên các đối tượng; các chỉ số đối sánh biểu thức chính quy thông qua /dcờ, cung cấp các chỉ số bắt đầu và kết thúc cho các chuỗi con phù hợp; thuộc causetính trên Errorcác đối tượng, có thể được sử dụng để ghi lại một chuỗi nhân quả của các lỗi; phương atthức cho Chuỗi, Mảng và TypedArrays, cho phép lập chỉ mục tương đối; và Object.hasOwn, một sự thay thế thuận tiện cho Object.prototype.hasOwnProperty.

Vào ngày 22 tháng 6 năm 2022, Đại hội đồng Ecma lần thứ 123 đã phê duyệt đặc tả ngôn ngữ ECMAScript 2022, có nghĩa là bây giờ nó chính thức là một tiêu chuẩn.

Có gì mới trong ECMAScript 2022 (JavaScript ES13)?  

  1. Thành viên mới của các lớp học
  2. Kiểm tra vị trí riêng tư thông qua nhà điều hành trong
  3. Cấp cao nhất đang chờ đợi trong các mô-đun
  4. sai lầm. lỗi
  5. Phương thức .at () của các giá trị có thể lập chỉ mục
  6. Chỉ số đối sánh RegExp
  7. Object.hasOwn (obj, propKey)

1 - Thành viên mới của các lớp

class MyClass {
  instancePublicField = 1;
  static staticPublicField = 2;

  #instancePrivateField = 3;
  static #staticPrivateField = 4;

  #nonStaticPrivateMethod() {}
  get #nonStaticPrivateAccessor() {}
  set #nonStaticPrivateAccessor(value) {}

  static #staticPrivateMethod() {}
  static get #staticPrivateAccessor() {}
  static set #staticPrivateAccessor(value) {}

  static {
    // Static initialization block
  }
}

2 - Kiểm tra vị trí riêng thông qua innhà điều hành  

Kiểm tra vị trí riêng còn được gọi là “kiểm tra thương hiệu công thái học cho các lĩnh vực riêng”. Biểu thức sau là một kiểm tra như vậy - nó xác định xem objcó vị trí riêng tư hay không #privateSlot:

#privateSlot in obj

Đây là một ví dụ:

class ClassWithPrivateSlot {
  #privateSlot = true;
  static hasPrivateSlot(obj) {
    return #privateSlot in obj;
  }
}

const obj1 = new ClassWithPrivateSlot();
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj1), true
);

const obj2 = {};
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj2), false
);

3 - Cấp cao nhất awaittrong các mô-đun 

Giờ đây, chúng tôi có thể sử dụng awaitở các cấp cao nhất của mô-đun và không phải nhập các hàm hoặc phương thức không đồng bộ nữa:

// my-module.mjs
const response = await fetch('https://example.com');
const text = await response.text();
console.log(text);

4 -error.cause 

Errorvà các lớp con của nó bây giờ cho phép chúng tôi chỉ định lỗi nào đã gây ra lỗi hiện tại:

try {
  // Do something
} catch (otherError) {
  throw new Error('Something went wrong', {cause: otherError});
}

Nguyên nhân của lỗi errhiển thị trong dấu vết ngăn xếp và có thể được truy cập thông qua err.cause.

5 - Phương pháp .at()của các giá trị có thể lập chỉ mục 

Phương thức .at()các giá trị có thể lập chỉ mục cho phép chúng ta đọc một phần tử tại một chỉ mục nhất định (như toán tử ngoặc []) và hỗ trợ các chỉ số âm (không giống như toán tử ngoặc):

> ['a', 'b', 'c'].at(0)
'a'
> ['a', 'b', 'c'].at(-1)
'c'

Các loại "có thể lập chỉ mục" sau đây có phương thức .at():

  • string
  • Array
  • Tất cả các lớp Mảng đã nhập: Uint8Arrayv.v.

6 - Chỉ số đối sánh RegExp

Nếu chúng ta thêm cờ /dvào một biểu thức chính quy, việc sử dụng nó sẽ tạo ra các đối tượng khớp ghi lại chỉ mục bắt đầu và kết thúc của mỗi lần nắm bắt nhóm (dòng A và B):

const matchObj = /(a+)(b+)/d.exec('aaaabb');

assert.equal(
  matchObj[1], 'aaaa'
);
assert.deepEqual(
  matchObj.indices[1], [0, 4] // (A)
);

assert.equal(
  matchObj[2], 'bb'
);
assert.deepEqual(
  matchObj.indices[2], [4, 6] // (B)
);

7 -Object.hasOwn(obj, propKey)

Object.hasOwn(obj, propKey)cung cấp một cách an toàn để kiểm tra xem một đối tượng objcó thuộc tính riêng (không được kế thừa) hay không bằng khóa propKey:

const proto = {
  protoProp: 'protoProp',
};
const obj = {
  __proto__: proto,
  objProp: 'objProp',
}

assert.equal('protoProp' in obj, true); // (A)

assert.equal(Object.hasOwn(obj, 'protoProp'), false); // (B)
assert.equal(Object.hasOwn(proto, 'protoProp'), true); // (C)

Lưu ý rằng inphát hiện các thuộc tính kế thừa (dòng A), trong khi Object.hasOwn()chỉ phát hiện các thuộc tính riêng (dòng B và C).

#javascript  #es13  #ecmascript  #programming 

Anne  de Morel

Anne de Morel

1656169200

7 Nouvelles Fonctionnalités ECMAScript 2022

ECMAScript 2022, la 13e édition, a introduit top-level await, permettant au mot-clé d'être utilisé au niveau supérieur des modules ; nouveaux éléments de classe : champs d'instance publics et privés, champs statiques publics et privés, méthodes et accesseurs d'instance privés, et méthodes et accesseurs statiques privés ; blocs statiques à l'intérieur des classes, pour effectuer l'initialisation de l'évaluation par classe ; la #x in objsyntaxe, pour tester la présence de champs privés sur les objets ; index de correspondance d'expression régulière via le /ddrapeau, qui fournit des indices de début et de fin pour les sous-chaînes correspondantes ; la causepropriété sur les Errorobjets, qui peut être utilisée pour enregistrer une chaîne de causalité dans les erreurs ; la atméthode pour Strings, Arrays et TypedArrays, qui permet une indexation relative ; et Object.hasOwn, une alternative pratique à Object.prototype.hasOwnProperty.

Le 22 juin 2022, la 123e assemblée générale de l'Ecma a approuvé la spécification du langage ECMAScript 2022, ce qui signifie qu'il s'agit désormais officiellement d'une norme.

Quoi de neuf dans ECMAScript 2022 (JavaScript ES13) ?  

  1. Nouveaux membres des classes
  2. Vérifications des créneaux privés via l'opérateur in
  3. Attente de haut niveau dans les modules
  4. erreur.cause
  5. Méthode .at() des valeurs indexables
  6. Indices de correspondance RegExp
  7. Objet.hasOwn(obj, propKey)

1 - Nouveaux membres de classes

class MyClass {
  instancePublicField = 1;
  static staticPublicField = 2;

  #instancePrivateField = 3;
  static #staticPrivateField = 4;

  #nonStaticPrivateMethod() {}
  get #nonStaticPrivateAccessor() {}
  set #nonStaticPrivateAccessor(value) {}

  static #staticPrivateMethod() {}
  static get #staticPrivateAccessor() {}
  static set #staticPrivateAccessor(value) {}

  static {
    // Static initialization block
  }
}

2 - Contrôles créneaux privés via l' inopérateur  

Les chèques à créneaux privés sont également appelés « chèques de marque ergonomiques pour les champs privés ». L'expression suivante est une telle vérification - elle détermine si obja un emplacement privé#privateSlot :

#privateSlot in obj

Ceci est un exemple:

class ClassWithPrivateSlot {
  #privateSlot = true;
  static hasPrivateSlot(obj) {
    return #privateSlot in obj;
  }
}

const obj1 = new ClassWithPrivateSlot();
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj1), true
);

const obj2 = {};
assert.equal(
  ClassWithPrivateSlot.hasPrivateSlot(obj2), false
);

3 - Niveau supérieur awaitdans les modules 

Nous pouvons maintenant utiliser awaitles niveaux supérieurs des modules et n'avons plus besoin d'entrer des fonctions ou des méthodes asynchrones :

// my-module.mjs
const response = await fetch('https://example.com');
const text = await response.text();
console.log(text);

4 -error.cause 

Erroret ses sous-classes précisons maintenant quelle erreur a provoqué celle en cours :

try {
  // Do something
} catch (otherError) {
  throw new Error('Something went wrong', {cause: otherError});
}

La cause d'une erreur errapparaît dans la trace de la pile et est accessible via err.cause.

5 - Méthode .at()des valeurs indexables 

La méthode .at()des valeurs indexables nous permet de lire un élément à un index donné (comme l'opérateur parenthèse []) et prend en charge les indices négatifs (contrairement à l'opérateur parenthèse) :

> ['a', 'b', 'c'].at(0)
'a'
> ['a', 'b', 'c'].at(-1)
'c'

Les types « indexables » suivants ont une méthode .at():

  • string
  • Array
  • Toutes les classes Typed Array : Uint8Arrayetc.

6 - Indices de correspondance RegExp

Si nous ajoutons le drapeau /dà une expression régulière, son utilisation produit des objets de correspondance qui enregistrent l'index de début et de fin de chaque capture de groupe (lignes A et B) :

const matchObj = /(a+)(b+)/d.exec('aaaabb');

assert.equal(
  matchObj[1], 'aaaa'
);
assert.deepEqual(
  matchObj.indices[1], [0, 4] // (A)
);

assert.equal(
  matchObj[2], 'bb'
);
assert.deepEqual(
  matchObj.indices[2], [4, 6] // (B)
);

sept -Object.hasOwn(obj, propKey)

Object.hasOwn(obj, propKey)fournit un moyen sûr de vérifier si un objet objpossède une propriété propre (non héritée) avec la clé propKey:

const proto = {
  protoProp: 'protoProp',
};
const obj = {
  __proto__: proto,
  objProp: 'objProp',
}

assert.equal('protoProp' in obj, true); // (A)

assert.equal(Object.hasOwn(obj, 'protoProp'), false); // (B)
assert.equal(Object.hasOwn(proto, 'protoProp'), true); // (C)

Notez que indétecte les propriétés héritées (ligne A), tandis que Object.hasOwn()ne détecte que les propriétés propres (lignes B et C).

#javascript  #es13  #ecmascript  #programming