Одиннадцатая версия скрипта ECMA только что была завершена, и мы можем надеяться на некоторые интересные вещи в течение года. Так что нового?
Первое, что нужно сказать, это то, что, к счастью, изменения сводятся к небольшим дополнениям. Как я уже говорил ранее, JavaScript сейчас является зрелым языком и многого не требует — больших изменений в его будущем нет. Какое из дополнений вы считаете самым важным — дело, конечно, субъективное.
Для меня, учитывая мой особый интерес к асинхронному кодированию, добавление метода allSettled к Promise является первым в моем списке. У нас есть гонка и все такое в течение некоторого времени, но они ждут, пока не разрешится первое Обещание или все они разрешатся. Новый метод allSettled ожидает завершения всех обещаний, даже если они отклонены. Это несложный метод для реализации с нуля, но он упростит код.
Учитывая, что я также увлекаюсь плавными вызовами методов или цепочкой, моим вторым выбором должна быть дополнительная цепочка и нулевой оператор объединения, даже если они вводят немного символизма черной магии.
Большая проблема с цепочкой — это то, что происходит, когда один из вызовов метода идет не так. В частности, что происходит, когда объект не определен. Например:
let result = myObject.myMethod1.? ();
проверит, существует ли myObject.myMethod1, и вернет undefined, если нет. Без необязательного оператора цепочки результатом была бы ошибка времени выполнения. Вы можете использовать необязательную цепочку несколько раз в плавном вызове, и вы можете использовать ее со свойствами, функциями, доступом к массиву и выражениями. Оператор .? может выглядеть странно, но заменяемые им операторы if намного хуже.
Оператор объединения с нулевым значением ?? тоже немного странно, но очень полезно. Это логический оператор, который возвращает свой правый операнд, если левый не имеет нулевого значения, то есть null или undefined. Это как ИЛИ || оператор, но он не реагирует на ложное значение слева. Обычно можно использовать ?? чтобы назначить значение по умолчанию более безопасно, чем с ИЛИ:
пусть myVariable = myValue ?? 42;
Это устанавливает myVariable в 42, если myValue имеет значение null или undefined, тогда как:
let myVariable = myValue || 42;
устанавливает значение 42, если myValue является ложным, т. е. 0, «» и т. д.
Это исправление, которое стоит иметь.
Еще одно функционально-ориентированное изменение — это введение строкового метода matchAll, который создает итератор для всех совпадений с регулярным выражением. Например, вы можете написать:
for (соответствие str.matchAll (regexp)) {
и цикл будет повторяться для всех подстрок, совпадающих с регулярным выражением. Вы можете использовать вызов метода везде, где ожидается итератор, и это дает ему большую гибкость, чем вы могли ожидать. Например:
Array.from (str.matchAll (регулярное выражение));
создает массив из совпадений.
Другими полезными дополнениями являются BigInt для неограниченной поддержки целых чисел, динамический импорт и новое ключевое слово globalThis, которое всегда дает вам глобальный объект, независимо от контекста.
Конечно, большинство из этих функций уже поддерживаются в текущих браузерах, но теперь они являются официальными.
Ян Эллиот является автором книг JavaScript Async, Just JavaScript: An Idiomatic Approach и JavaScript Bitmap Graphics with Canvas, которые являются частью библиотеки I Programmer Library, опубликованной I / O Press.