Открывая последние новости и предвосхищая будущее

Быть в курсе последних событий в ECMAScript может быть довольно сложно, а найти идеальный пример кода может быть еще сложнее.

В этой статье моя цель — всесторонне рассмотреть все функции, описанные в полном предложении TC39, включенные в ES2023 или ECMAScript 2023, а также то, что ожидается в будущем.

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

Давайте теперь подробнее рассмотрим, что нового в ECMAScript 14.

Массив найти из последнего:

Поиск элементов в массиве — рутинная задача программиста. Метод .find() в JavaScript, который соответствует заданному условию для каждого элемента в массиве и возвращает первое совпадение, а .findIndex() делает то же самое, но вместо значения возвращает индекс.

let array = [2,7,8,13,9];

let findEven = (no)=>{
    return no%2==0;
}
console.log(array.find(findEven)); //2
console.log(array.findIndex(findEven)); //0

Но теперь в ES14 у нас есть два новых метода: .findLast() и .findLastIndex(), которые делают то же самое, но из последнего.

let array = [2,7,8,13,9];
let findEven = (no)=>{
    return no%2==0;
}
console.log(array.findLast(findEven));//8
console.log(array.findLastIndex(findEven));//2

так почему это может быть полезно, если вы разработчик, который работает с массивом, который, вероятно, очень большой, и если вы знаете, что это отсортированный массив, то использование .findLast() и .findLastIndex() может дать вам действительно хорошую производительность.

Изменить массив копией:

ECMAScript 2023, 14-я редакция, представила методы .toSorted() , .toReversed() , .with() в Array.prototype и TypedArray.prototype и .toSpliced()method в Array.prototype. сильный>

В JavaScript всякий раз, когда у нас есть массив элементов и мы запускаем какой-либо метод (.sort(), .reverse(), .splice()), он фактически манипулирует исходным массивом.

// Example 1 (Array.prototype.reverse())
let array = [7,2,8,13,9];
let reverseArray = array.reverse();
console.log(reverseArray); //[9, 13, 8, 2, 7]
console.log(array); //[9, 13, 8, 2, 7]

// Example 2 (Array.prototype.sort())
let secondArray = [32,12,104,16,28];
let sortedArray = secondArray.sort()
console.log(sortedArray); //[104, 12, 16, 28, 32]
console.log(secondArray); //[104, 12, 16, 28, 32]
//By default, the sort() function sorts values as strings.

// Example 3 (Array.prototype.splice(start, deleteCount, item0))
let thirdArray = [32,12,104,16,28];
let spliceMethod = thirdArray.splice(2,0,21);
console.log(spliceMethod); 
console.log(thirdArray); //[32, 12, 21, 104, 16, 28]

Но в ES14 у нас есть интересная модификация этого метода, где нам предоставляется некоторая вариация тех же методов, где ответ на самом деле не мутирует исходный массив, а возвращает новую копию массива.

// Example 1 (Array.prototype.toReversed())
let array = [7,2,8,13,9];
let reverseArray = array.toReversed();
console.log(reverseArray); //[9, 13, 8, 2, 7]
console.log(array); //[7, 2, 8, 13, 9]

// Example 2 (Array.prototype.toSorted())
let secondArray = [32,12,104,16,28];
let sortedArray = secondArray.toSorted();
console.log(sortedArray); //[104, 12, 16, 28, 32]
console.log(secondArray); //[32, 12, 104, 16, 28]
//By default, the sort() function sorts values as strings.

// Example 3 (TypedArray.prototype.toSpliced(start, deleteCount, item0))
let thirdArray = [32,12,104,16,28];
let spliceMethod = thirdArray.toSpliced(2,0,21);
console.log(spliceMethod); //[32, 12, 21, 104, 16, 28]
console.log(thirdArray); // [32, 12, 104, 16, 28]
// Example 2 (Array.prototype.with())
let withMethod = thirdArray.with(1,14);
console.log(withMethod);[32, 14, 104, 16, 28]

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

WeakMap — это структура данных или коллекция, представленная в ES6, которая позволяет хранить коллекцию пар ключ-значение. Ключи должны быть типа object. Основное отличие WeakMap с Map заключается в том, что на ключ WeakMap слабо ссылаются, что означает, что если нет других ссылок на ключевые объекты, они могут быть удалены сборщиком мусора. Symbol — единственный примитивный тип в ECMAScript, допускающий уникальные значения.

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

const weakmap = new WeakMap();

const key = Symbol('itsKey');
const value = 'Random';
weakmap.set(key, value);
console.log(weakmap.get(key)); // Random

Хэшбанг Грэммер:

Hashbang Grammar — это функция, позволяющая выполнять файлы JavaScript как сценарии в совместимых средах, таких как операционные системы Unix. Это достигается за счет использования уникального синтаксиса, называемого «hashbang» или «shebang», помещенного в начало файла. За синтаксисом следует путь к интерпретатору, отвечающему за запуск скрипта.

#!/usr/bin/env node

// in the Script Goal
'use strict';
console.log(1);
// in the Module Goal
export {};
console.log(1);

В этом примере директива hashbang #!/usr/bin/env node используется для указания того, что сценарий предназначен для выполнения с использованием интерпретатора Node.js.

Давайте посмотрим, что нас ждет в ближайшем будущем:

ECMAScript 2023 был выпущен всего несколько дней назад. Пока рано говорить о том, какие изменения будут внесены в ECMAScript 2024. В настоящее время на завершенном этапе (этап 4) находятся три предложения, и они находятся на пути к включению в ECMAScript 2024.

Давайте кратко рассмотрим эти предложения.

Правильно сформированные строки Unicode:

В предложении предлагается добавить эффективный метод ECMA-262 для проверки правильного формата строки Unicode. Он направлен на повышение ясности кода и производительности в JavaScript и веб-API. Кроме того, в предложении представлен метод исправления изолированных или неправильно упорядоченных суррогатных символов в соответствии с существующей практикой.

Это предложение вводит два новых метода:

String.prototype.isWellFormed :

По сути, он возвращает true, если в строке нет суррогатов.

const wellFormedStr = "Hello, World!";
const illFormedStr = "Hello, \uD800 World!";
console.log(wellFormedStr.isWellFormed()); // true 
console.log(illFormedStr.isWellFormed()); // false

String.prototype.toWellFormed:

Возвращает строку, в которой все одиночные суррогаты строки заменены символом замены Unicode U+FFFD .

const wellFormedStr = "Hello, World!";
const illFormedStr = "Hello, \uD800 World!";

console.log(wellFormedStr.toWellFormed()); // Hello, World!
console.log(illFormedStr.toWellFormed()); // Hello, � World!

Atomics.waitAsync :

Atomics.waitAsync, который позволяет агентам ожидать в общей памяти без блокировки. Это особенно полезно для агентов, которые не могут блокировать, например основной поток документа веб-браузера.

Флаг RegExp v с установленной нотацией + свойства строк:

Предлагаемые усовершенствования регулярных выражений ECMAScript призваны произвести революцию в сопоставлении с образцом в JavaScript. Вводя такие операции, как

  • разность/вычитание (в A, но не в B)
  • пересечение (как в A, так и в B)
  • вложенные классы символов (необходимы для включения вышеуказанного)

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

// difference/subtraction
[A--B]

// intersection
[A&&B]
// nested character class
[A--[0-9]]

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

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

Ваша готовность поддержать приветствуется. Хотя вы и не являетесь участником партнерской программы Medium, вы можете ««Купить мне кофе», чтобы поддержать мой вклад. Спасибо за внимание и поддержку моей работы».