Аватарка пользователя Рафаил Агазода
Рафаил Агазода

Что было добавлено в ECMAScript в 2023 году

Рассказываем, что было добавлено в ECMAScript в 2023 году. Это стандарт JavaScript, который устанавливает правила и синтаксис JS-кода.

15429

ECMAScript – это стандарт языка программирования JavaScript, который устанавливает правила, синтаксис и другие критерии создания JavaScript-кода.

ECMAScript ежегодно дополняется сообществом разработчиков JavaScript и соответствует стандартам ECMA International. Самые последние обновления ECMAScript включают в себя новые функции и методы, которые помогают разработчикам писать более гибкий и мощный код.

Эти обновления позволяют создавать более качественные и быстрые веб-приложения, а также обеспечивают возможность масштабирования и поддержки кода в будущем. 

Обновления помогают большинству веб-приложений стать более мощными и производительными, что расширяет возможности для создания инновационных и уникальных приложений на основе JavaScript.

Вот, какие функции были добавлены в ECMAScript в 2023 году.

1. Поиск элемента в массиве

Эта функция позволяет найти последний элемент массива, соответствующий заданному условию.

			const array = [{a: 1, b: 1}, {a: 2, b: 2}, {a: 3, b: 3}, {a: 4, b: 4}]

console.log(array.findLast(n => n)); //result -> {a: 4,b: 4 }

console.log(array.findLast(n => n.a * 5 === 20)); // result -> {a:4,b:4} as the condition is true so it returns the last element.

console.log(array.findLast(n => n.a * 5 === 21)); //result -> undefined as the condition is false so return undefined instead of {a:4,b:4}.

console.log(array.findLastIndex(n => n.a * 5 === 21)); // result -> -1 as the condition is not justified for returning the last element.

console.log(array.findLastIndex(n => n.a * 5 === 20)); // result -> 3 which is the index of the last element as the condition is true.
		

2. Грамматика Hashbang

Эта функция позволит нам использовать Hashbang/Shebang в некоторых CLI.

Shebang представлен #! и представляет собой специальную строку в начале скрипта, которая сообщает операционной системе, какой интерпретатор использовать при выполнении скрипта.

			#!/usr/bin/env node
// in the Script Goal
'use strict';
console.log(2*3);

#!/usr/bin/env node
// in the Module Goal
export {};
console.log(2*2);
		

Строка #!/usr/bin/env node вызывает исходный файл Node.js напрямую как исполняемый файл.

Нам не понадобится строка #!/usr/bin/env node для явного вызова файла через интерпретатор узла, например, node ./file.

3. Символы-ключи в WeakMap

Теперь можно использовать уникальные символы в качестве ключей.

До этого обновления WeakMaps можно было использовать в качестве ключей только объекты. Объекты используются в качестве ключей для WeakMaps, потому что они имеют один и тот же аспект идентичности.

Symbol — это единственный примитивный тип в ECMAScript, который позволяет использовать для него уникальные значения. Использовать Symbol теперь можно и в качестве ключа вместо создания нового объекта с помощью WeakMap.

			const weak = new WeakMap();

const key = Symbol('my ref');
const someObject = { a:1 };

weak.set(key, someObject);
console.log(weak.get(key));
		

Здесь указаны другие варианты использования, связанные с ShadowRealms и Record & Tuples и с использованием символов в качестве WeakMaps.

4. Изменить массив через копирование

Обновление предоставляет дополнительные методы в Array.prototype для внесения изменений в массив, возвращая его новую копию с изменением вместо обновления исходного массива.

Новые введенные функции Array.prototype:

  1. Array.prototype.toReversed()
  2. Array.prototype.toSorted(compareFn)
  3. Array.prototype.toSpliced (start, deleteCount, … items)
  4. Array.prototype.with(index, value)
			const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

/* toReversed */

const reversed = numbers.toReversed();
console.log("reversed", reversed); // "reversed", [9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]

/* toSorted  */
const sortedArr = numbers.toSorted();
console.log("sorted", sortedArr); // "sorted", [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]

/* with */
const replaceWith = numbers.with(1, 100);
console.log("with", replaceWith); // "with", [1, 100, 3, 4, 5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]

/* toSpliced */
const splicedArr = numbers.toSpliced(0, 4);
console.log("toSpliced", splicedArr); // "toSpliced", [5, 6, 7, 8, 9]
console.log("original", numbers); // "original", [1, 2, 3, 4, 5, 6, 7, 8, 9]
		
***

Обновления ECMAScrpit принесли потрясающий набор новых функций, которые серьёзно облегчают кодинг. Если вы уже успели опробовать новые функции, напишите в комментариях, удобнее ли вам стало работать.

Удачного кодинга!

Следите за новыми постами по любимым темам

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

JavaScript
Массивы и строки
Языки программирования
TypeScript
15429
Что думаете?
9 комментариев
Сначала интересные
Аватар пользователя Vadzim Liashkevich
"Эта функция позволяет найти нужный элемент — от первого до последнего — в массиве с помощью установленного условия." - 3 раза перечитал пытаясь вникнуть в то, что тут написано, пока на код не посмотрел. Может просто "Позволяет найти последний элемент массива, соответстветствующий заданному условию"?
Аватар пользователя Рафаил Агазода
Автор
Vadzim Liashkevich, Да, вы правы. Исправил, спасибо!
Аватар пользователя Владислав Турулов
считаю грамматику Hashbang весьма удачной: это облегчают разработку JavaScript. Нужно применить в какомнибудь из своих проектов
Аватар пользователя Павел Федоренко
ИМХО, ничего лучше ES3-ES5 не придумали
Аватар пользователя Yeltsin Death Brigade
Павел Федоренко, А что просится добавить вместо этих обновлений тогда?
Показать все комментарии