Открывая последние новости и предвосхищая будущее
Быть в курсе последних событий в 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, вы можете ««Купить мне кофе», чтобы поддержать мой вклад. Спасибо за внимание и поддержку моей работы».