Узнайте о последних и интересных дополнениях ES 2023.

Цель этой статьи — познакомить вас с будущими функциями ECMAScript 2023 (ES 14), попутно предоставляя примеры. Мы обсудим эти новые предложения, которые, как ожидается, будут включены в ECMAScript 2023.

ECMAScript (часто сокращенно ES) — это стандартизированный язык программирования, который используется для написания сценариев и создания веб-приложений. Это язык, на котором основан JavaScript и который обеспечивает основу для динамических и интерактивных функций современных веб-приложений. ECMAScript поддерживается организацией по стандартизации Ecma International и регулярно обновляется новыми функциями и улучшениями.

ECMAScript 2023 — это следующая версия языка ECMAScript, и ожидается, что она будет выпущена в конце июня 2023 года. Четыре предложения по ECMAScript 2023 (ES14) были завершены в этом году и в настоящее время перечислены на GitHub как завершенные предложения, которые приближаются к официальному релизу. Ожидается, что эти предложения будут официально опубликованы в июне 2023 года.

Рассмотрим каждое из этих предложений.

Поиск массива из последнего

Это предложение добавляет следующие два метода к прототипам Array и TypedArray:

  • findLast()
  • findLastIndex()

Эта новая предлагаемая функция работает аналогично двум существующим методам, называемым Array.prototype.find и Array.prototype.findIndex. Однако есть одно важное отличие: вместо того, чтобы начинать с начала массива и двигаться вперед, предлагаемая функция будет начинаться с конца массива и двигаться назад. Методы Array.prototype.find и Array.prototype.findIndex выполняют поиск в массиве от первого элемента к последнему, а методы findLast() и findLastIndex() выполняют поиск в массиве от последнего элемента к первому.

Давайте посмотрим на несколько примеров, чтобы увидеть, как работают эти новые методы:

const isMultipleOfTwo = (number) => number % 2 === 0;
const numbers = [4, 9, 1, 2, 8];

// traverse from first to the last element
console.log(numbers.find(isMultipleOfTwo)); // 4
console.log(numbers.findIndex(isMultipleOfTwo)); // 0

// traverse from last to the first element
console.log(numbers.findLast(isMultipleOfTwo)); // 8
console.log(numbers.findLastIndex(isMultipleOfTwo)); // 4

Хашбанг Грамматика

hashbang — это набор символов, помещаемых в начало скрипта, который указывает, какой интерпретатор должен запускать программу. Эта предлагаемая функция призвана помочь разработчикам, которые хотят создавать сценарии, которые можно выполнять непосредственно из командной строки. Это упростит процесс определения интерпретатора скрипта, облегчив запуск скрипта в различных операционных системах. Без хеш-банга вам обычно нужно использовать определенную команду (например, «node») для выполнения скрипта в терминале.

// hashbang.js
#!/usr/bin/env node
console.log('hashbang');

// nohashbang.js
console.log('no hashbang')

Символы как ключи WeakMap

Первоначально WeakMap в JavaScript позволял использовать только objects как keys. Objects и Symbols уникальны и не могут быть продублированы, что делает их подходящим выбором для ключей в WeakMap. Однако в предыдущих версиях или спецификациях использование keys ограничивалось только objects. предыдущие версии или спецификации разрешали использовать только объекты в качестве keys, но это предложение добавляет незарегистрированные символы в список разрешенных ключей.

Давайте посмотрим на пример, чтобы увидеть, как это работает:

const wm1 = new WeakMap();
const wm2 = new WeakMap();

const o1 = {};
const o2 = function () {};

wm1.set(o1, 37);
wm1.set(o2, "azerty");
wm2.set(o1, o2); // a value can be anything, including an object or a function
wm2.set(wm1, wm2); // keys and values can be any objects. Even WeakMaps!

// use symbol as key
const wm3 = new WeakMap();
const key = Symbol("symbolAsKey");
wm3.set(key, "Value");
console.log(wm3.get(key)); // Value

Изменить массив путем копирования

В предложении Change Array by Copy добавлены новые методы для Array.prototype и TypedArray.prototype, которые возвращают новую копию вместо изменения исходного массива на месте.

Это предложение вводит следующие свойства функции для Array.prototype:

  • Array.prototype.toReversed() -> Array
  • Array.prototype.toSorted(compareFn) -> Array
  • Array.prototype.toSpliced(start, deleteCount, ...items) -> Array
  • Array.prototype.with(index, value) -> Array

Все эти методы сохраняют целевой массив нетронутым и вместо этого возвращают его копию с выполненным изменением.

toReversed, toSorted и with также будут добавлены в TypedArrays:

  • TypedArray.prototype.toReversed() -> TypedArray
  • TypedArray.prototype.toSorted(compareFn) -> TypedArray
  • TypedArray.prototype.with(index, value) -> TypedArray

Давайте рассмотрим несколько примеров того, как это работает:

// toReversed()

// Array
const original = [1, 2, 3, 4];
const reversed = original.toReversed();
console.log(original); // [ 1, 2, 3, 4 ]
console.log(reversed); // [ 4, 3, 2, 1]

// TypedArray
const original1 = new Uint8Array([1, 2, 3, 4]);
const reversed1 = original1.toReversed();
console.log(original1); // [ 1, 2, 3, 4]
console.log(reversed1); // [ 4, 3, 2, 1]
// toSorted()

// Array
const original = [7, 10, 9, 8];
const sorted = original.toSorted((a, b) => a - b);
console.log(original); // [ 7, 10, 9, 8 ]
console.log(sorted); // [ 7, 8, 9, 10 ]

// TypedArray
const original1 = new Uint8Array([7, 10, 9, 8]);
const sorted1 = original1.toSorted((a, b) => a - b);
console.log(original1); // [ 7, 10, 9, 8 ]
console.log(sorted1); // [ 7, 8, 9, 10 ]
// toSpliced()

const original = [1, 5];
const spliced = original.toSpliced(1, 0, 2, 3,4);

console.log(original); // [ 1, 5]
console.log(spliced); // [ 1, 2, 3, 4, 5 ]
// with()

// Array
const original = [1, 3, 3, 4, 5];
const replaced = original.with(1, 2);

console.log(original); // [ 1, 3, 3, 4, 5 ]
console.log(replaced); // [ 1, 2, 3, 4, 5 ]

// TypedArray
const original1 = new Uint8Array([1, 3, 3, 4, 5]);
const replaced1 = original1.with(1, 2);

console.log(original1); // [ 1, 3, 3, 4, 5 ]
console.log(replaced1); // [ 1, 2, 3, 4, 5 ]

Заключение

Я надеюсь, что эта статья дала вам подробный обзор того, что вы можете ожидать от ECMAScript 2023. У нас еще есть время до июня, и есть вероятность, что в окончательный выпуск ECMAScript 2023 могут быть добавлены дополнительные функции.

Я надеюсь, что эта статья была полезной и приятной для вас. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, не стесняйтесь обращаться ко мне. Я также был бы признателен 👏, если вам понравился пост, чтобы другие тоже могли его найти.

Спасибо, и увидимся в следующий раз!

Рекомендации



Указывающий человек в формате PNG загружается сhttps://www.vecteezy.com/free-png/man-pointing