какая версия ecmascript последняя
Нововведения JavaScript ES2020 с простыми примерами
Представляем вам перевод статьи из блога Carlos Caballero на сайте Medium.com. Ранее мы публиковали материал этого автора о функциях ES10, появившихся в 2019 году.
Фото AbsolutVision с Unsplash
Введение
ES2020 — это версия ECMAScript, актуальная для 2020 года. В ней не так много нововведений по сравнению с ES6, вышедшей в 2015 году, но несколько полезных функций все же есть.
В этой статье новые фичи ES2020 описываются на простых примерах кода. Вы сможете быстро понять их без каких-либо сложных разъяснений.
Конечно, чтобы полностью разобраться в представленных примерах, нужно обладать базовыми знаниями JavaScript.
Нововведения JavaScript в ES2020:
Метод String.protype.matchAll
При сопоставлении строки с регулярным выражением метод matchAll() возвращает итератор по всем результатам, включая группы захвата.
Динамический import()
BigInt — целые числа произвольной длины
Метод Promise.allSettled
Метод Promise.allSettled возвращает промис с массивом состояний промисов, но только после того, как все исходные промисы были завершены. Мы говорим, что промис завершен, если он не находится в ожидании, то есть либо выполнен, либо отклонен.
Стандартизованный объект globalThis
Объект globalThis не был стандартизован до появления ES10. В готовом коде его приходилось приводить к стандарту для различных платформ самостоятельно, прописывая нечто громоздкое, как в примере ниже.
Механизм выполнения цикла for-in
Стандарт ECMA-262 оставляет порядок обработки конструкции for (a in b) почти полностью неопределенным, но реальные движки все же пытаются быть последовательными в некоторых случаях.
Неоднократные попытки достичь согласия в определении точного порядка цикла for-in проваливались. Частично это объясняется тем, что все движки имеют свое специфическое применение, что является результатом большой работы, которую совершенно не хотелось пересматривать.
Оператор Nullish Coalescing
Этот метод хорошо работает для обычных значений null или undefined, но существует ряд ложных значений, которые могут давать неожиданные результаты.
Оператор Optional Chaining
При обращении к свойству, расположенному глубоко в древовидной структуре, зачастую приходится добавлять проверки на существование промежуточных узлов.
Оператор Optional Chaining (оператор опциональных цепочек) позволяет разработчикам обрабатывать много подобных случаев без повторов и/или присвоения промежуточных результатов временным переменным.
Оператор объединения с неопределенным значением часто применим в случаях, когда отсутствие результата не должно выражаться значением undefined.
Заключение
JavaScript — живой язык, и это очень благотворно влияет на веб-разработку. Мы наблюдаем его динамичное развитие с момента появления ES6 в 2015 году, а в этой статье освещаем возможности версии ES2020.
Вероятно, не все эти нововведения окажутся нужными для создания вашего веб-приложения. Но все они позволяют обойтись без хитроумных приемов или написания большого количества кода там, где это требовалось раньше.
EcmaScript 10 — JavaScript в этом году (ES2019)
Стандартизация JS перешла на годичный цикл обновлений, а начало года — отличное время для того чтобы узнать, что нас ждёт в юбилейной — уже десятой редакции EcmaScript!
На сегодняшний день в Stage 4 # — всего несколько предложений.
Автор фото: kasper.green; Жёлтый магнит: elfafeya.art & kasper.green
Содержание
Пять стадий #
Stage 4 — Final #
Stage 3 — Pre-release #
Итоги #
Пять стадий
Stage 0 ↓ Strawman Наметка Идея, которую можно реализовать через Babel-плагин.;
Stage 1 ↓ Proposal Предложение Проверка жизнеспособности идеи.;
Stage 2 ↓ Draft Черновик Начало разработки спецификации.;
Stage 3 ↓ Candidate Кандидат Предварительная версия спецификации.;
Stage 4 ֍ Finished Завершён Финальная версия спецификации на этот год.
Мы рассмотрим только Stage 4 — де-факто, вошедший в стандарт.
И Stage 3 — который вот-вот станет его частью.
֍ Stage 4
Эти изменения уже вошли в стандарт.
Необязательный аргумент у catch
До ES10 блок catch требовал обязательного аргумента для сбора информации об ошибке, даже если она не используется:
Edge пока не обновлён до ES10, и ожидаемо валится с ошибкой
Мой Chrome уже обновился до ES10, а местами и до Stage 3. Дальше скриншоты будут из Chrome
Доступ к описанию символьной ссылки
Описание символьной ссылки можно косвенно получить методом toString():
Начиная с ES10 у символов появилось свойство description, доступное только для чтения. Оно позволяет без всяких танцев с бубном получить описание символа:
В случае если описание не задано, вернётся — undefined :
Строки EcmaScript совместимые с JSON
Строки ECMAScript до десятой версии — нет.
C ES10 строками — всё в порядке:
Если реализация не может создать строку исходного кода, соответствующую этим критериям, она должна вернуть строку, для которой eval будет выброшено исключение с ошибкой синтаксиса.
уточнить «функционально эквивалентное» требование;
стандартизировать строковое представление встроенных функций и хост-объектов;
уточнить требования к представлению на основе «фактических характеристик» объекта;
убедиться, что синтаксический анализ строки содержит то же тело функции и список параметров, что и оригинал;
для функций, определенных с использованием кода ECMAScript, toString должен возвращать фрагмент исходного текста от начала первого токена до конца последнего токена, соответствующего соответствующей грамматической конструкции;
для встроенных функциональных объектов toStringне должны возвращать ничего, кроме NativeFunction;
для вызываемых объектов, которые не были определены с использованием кода ECMAScript, toString необходимо вернуть NativeFunction;
для функций, создаваемых динамически (конструкторы функции или генератора) toString, должен синтезировать исходный текст;
для всех других объектов, toString должен бросить TypeError исключение.
Новые возможности ES2021 / ES12
Ожидается, что версия ECMAScript 2021 будет выпущена в июне 2021 года. Вот некоторые из функций, которые могут оказаться в ES2021 или ES12. Список подготовлен на основе ECMAScript Proposals и новых функций, выпущенных движком Google Chrome V8.
Все функции, перечисленные ниже, на момент написания поддерживаются в сборке Google Chrome Canary (версия браузера Google Chrome, поддерживающая экспериментальные возможности).
Метод String replaceAll()
String.prototype.replaceAll() заменяет все вхождения строки другим строковым значением.
В настоящее время в JavaScript у строк есть метод replace(). Его можно использовать для замены подстроки другой строкой.
Если входной шаблон для замены является строкой, метод replace() заменяет только первое вхождение. Поэтому в коде второе вхождение «Back» не заменяется.
Мы можем сделать полную замену, только если предоставим шаблон для замены в виде регулярного выражения.
String.prototype.replaceAll() пытается произвести замену всех вхождений, даже если входной шаблон является строкой.
Приватные методы
Приватные методы могут быть доступны только внутри класса, в котором они определены. Имена приватных методов начинаются с символа #.
Поскольку setType() является приватным методом, personObj.setType возвращает значение undefined. Попытка использовать undefined в качестве функции вызывает ошибку TypeError.
Приватные аксессоры
Функции-аксессоры (get/set) можно сделать приватными, добавив # к имени функции.
В приведенном выше коде ключевые слова get и set делают name аксессором. Несмотря на то, что name выглядит как функция, его можно читать как обычное свойство.
WeakRef
WeakRef означает слабые ссылки (Weak References). В основном слабые ссылки используются для реализации кэшей или маппингов больших объектов. В таких сценариях мы не хотим удерживать большое количество памяти надолго, сохраняя редко используемый кэш или маппинг. Мы можем разрешить сборку мусора для памяти в ближайшее время, а позже, если она нам снова понадобится, мы можем создать свежий кэш.
Рассмотрим следующий код:
При выполнении указанного выше кода через 2 секунды выводится «Backbencher». В зависимости от того, как мы используем функцию callback(), переменная aBigObj может храниться в памяти вечно.
Давайте сделаем aBigObj слабой ссылкой.
WeakRef создается с помощью new WeakRef(). Позже ссылка читается с помощью метода .deref(). Внутри асинхронной функции первый setTimeout() обязательно напечатает значение name. Это гарантируется на первом этапе цикла обработки событий после создания слабой ссылки.
Но нет гарантии, что второй setTimeout() напечатает «Backbencher». Слабая ссылка могла быть освобождена сборщиком мусора. Поскольку сборка мусора в разных браузерах работает по-разному, мы не можем гарантировать результат. Вот почему мы используем WeakRef в таких ситуациях, как управление кэшем.
Финализаторы
Здесь registry является экземпляром FinalizationRegistry. Функция обратного вызова (коллбек), переданная в FinalizationRegistry, срабатывает при сборке мусора.
Promise.any() и AggregateError
Promise.any() успешно завершается, если успешно завершился любой из предоставленных в качестве аргументов промис. Ниже у нас есть 3 промиса, которые выполняются в случайное время.
Promise.any() возвращает результат первого успешно завершившегося промиса среди p1, p2 и p3.
Что, если ни один из промисов не завершится успешно? В таком случае Promise.any() сгенерирует исключение AggregateError. Нам нужно поймать это исключение и обработать.
В демонстрационных целях в Promise.any() передается только один промис. И этот промис завершается «с ошибкой» (reject). Приведенный выше код выведет следующую ошибку в консоли.
Оператор логического присваивания
Оператор логического присваивания объединяет логические операции (&&, || или ??) с присваиванием.
Строка 3 эквивалентна следующему выражению:
Как и в случае с &&, мы можем поступить так же и с логическими операциями || и .
Оператор логического присваивания с ||
Строка 3 эквивалентна следующему выражению:
Это означает, что операция присваивания происходит, только если x является ложным значением. В нашем коде x содержит 1, что является истинным значением, и, следовательно, присваивания не происходит. Вот почему наш код выводит 1 в консоли.
В строке 2, если значение a равно null или undefined, правая часть ?? вычисляется и присваивается переменной b.
Давайте теперь рассмотрим ?? вместе с =.
Строка 2 в коде выше эквивалентна следующему выражению:
Здесь значение x равно undefined. Таким образом, выражение в правой части вычисляется и устанавливает x равным 2.
ES6, ES8, ES2017: что такое ECMAScript и чем это отличается от JavaScript
Авторизуйтесь
ES6, ES8, ES2017: что такое ECMAScript и чем это отличается от JavaScript
Изучение JavaScript может сбить с толку по множеству причин, и одна из них — акронимы. Чтобы не дать сокращениям сбить вас с толку, в этой статье мы разберём их значения и историю возникновения.
Что такое ECMAScript?
Сначала немного истории. JavaScript создавался как скриптовый язык для Netscape. После чего он был отправлен в ECMA International для стандартизации (ECMA — это ассоциация, деятельность которой посвящена стандартизации информационных и коммуникационных технологий). Это привело к появлению нового языкового стандарта, известного как ECMAScript.
Последующие версии JavaScript уже были основаны на стандарте ECMAScript. Проще говоря, ECMAScript — стандарт, а JavaScript — самая популярная реализация этого стандарта.
Что такое ES? История версий
ES — это просто сокращение для ECMAScript. Каждое издание ECMAScript получает аббревиатуру ES с последующим его номером. Всего существует 8 версий ECMAScript. ES1 была выпущена в июне 1997 года, ES2 — в июне 1998 года, ES3 — в декабре 1999 года, а версия ES4 — так и не была принята. Не будем углубляться в эти версии, так как они морально устарели, а рассмотрим только последние четыре.
ES5 был выпущен в декабре 2009 года, спустя 10 лет после выхода третьего издания. Среди изменений можно отметить:
Версия ES6/ES2015 вышла в июне 2015 года. Это также принесло некую путаницу в связи с названием пакета, ведь ES6 и ES2015 — это одно и то же. С выходом этого пакета обновлений комитет принял решение перейти к ежегодным обновлениям. Поэтому издание было переименовано в ES2015, чтобы отражать год релиза. Последующие версии также называются в соответствии с годом их выпуска. В этом обновлении были сделаны следующие изменения:
4–5 декабря, Онлайн, Беcплатно
ES2016 (ES7) вышла в июне 2016 года. Среди изменений в этой версии ECMAScript можно отметить:
Спустя еще год выходит версия ES2017 (ES8). Данный стандарт получил следующие изменения:
Версии Javascript
JavaScript был придуман Бренданом Эйхом (Brendan Eich) в 1995 году и стал стандартом ECMA в 1997 году. Официальное название стандарта — ECMA. А официальное названия языка — ECMAScript. С 2015 года версию языка ECMAScript называют по году (ECMAScript 2015).
Редакции ECMAScript
Версия | Официальное название | Описание |
---|---|---|
1 | ECMAScript 1 (1997) | Первая редакция. |
2 | ECMAScript 2 (1998) | Внесены редакционные правки. |
3 | ECMAScript 3 (1999) | Добавлены регулярные выражения. Добавлен оператор try/catch. |
4 | ECMAScript 4 | Никогда не выходил. |
5 | ECMAScript 5 (2009) | Добавлен «строгий режим». Добавлена поддержка JSON. Добавлен String.trim(). Добавлен Array.isArray(). Добавлены методы обхода элементов массива. |
5.1 | ECMAScript 5.1 (2011) | Внесены редакционные правки. |
6 | ECMAScript 2015 | Добавлены ключевые слова let и const. Добавлены значения параметров по умолчанию. Добавлен Array.find(). Добавлен Array.findIndex(). |
7 | ECMAScript 2016 | Добавлен оператор возведения в степень (**). Добавлен Array.prototype.includes. |
8 | ECMAScript 2017 | Добавлен «паддинг» строки (дополнение до нужной длины). Добавлены новые свойства объекта Object. Добавлены асинхронные функции. Добавлены разделяемая память и атомарные операции. |
9 | ECMAScript 2018 | Добавлены свойства rest / spread. Добавлены асинхронные итерации. Добавлен Promise.finally(). Добавления в объект RegExp. |
ECMAScript часто сокращается до ES.
Поддержка браузерами
ECMAScript 3 полностью поддерживается всеми браузерами.
ECMAScript 5 поддерживается всеми современными браузерами.
Поддержка браузерами ES5 (2009)
Браузер | Версия | Начиная с |
---|---|---|
Chrome | 23 | сентябрь 2012 |
Firefox | 21 | апрель 2013 |
IE | 9* | март 2011 |
IE / Edge | 10 | сентябрь 2012 |
Safari | 6 | июль 2012 |
Opera | 15 | июль 2013 |
* Internet Explorer 9 не поддерживает директиву ECMAScript 5 «use strict».
Поддержка браузерами ES6 (2015)
Браузер | Версия | Начиная с |
---|---|---|
Chrome | 58 | апрель 2017 |
Firefox | 54 | июнь 2017 |
Edge | 14 | август 2016 |
Safari | 10 | сентябрь 2016 |
Opera | 55 | август 2017 |
Internet Explorer не поддерживает ECMAScript 2015.
Поддержка браузерами ES7 (2016)
JavaScript / ECMAScript
JavaScript был разработан для Netscape. Первым браузером, поддерживающим JavaScript, стал вышедший в 1996 году браузер Netscape 2. После Netscape компания Mozilla foundation продолжила разработку JavaScript для своих браузеров Firefox. Последняя версия JavaScript это 1.8.5 (идентична ECMAScript 5).
ECMAScript был разработан Ecma International после адаптации JavaScript. Первая редакция ECMAScript вышла в 1997 году.
Следующая таблица показывает, как соотносятся номера версий этих продуктов:
Год | JavaScript | ECMA | Браузер |
---|---|---|---|
1996 | 1.0 | Netscape 2 | |
1997 | ECMAScript 1 | IE 4 | |
1998 | 1.3 | Netscape 4 | |
1999 | ECMAScript 2 | IE 5 | |
2000 | ECMAScript 3 | IE 5.5 | |
2000 | 1.5 | Netscape 6 | |
2000 | 1.5 | Firefox 1 | |
2011 | ECMAScript 5 | IE 9 (за исключением «use strict») | |
2011 | 1.8.5 | Firefox 4 (за исключением начальных нулей в parseInt) | |
2012 | IE 10 | ||
2012 | Chrome 23 | ||
2012 | Safari 6 | ||
2013 | Firefox 21 | ||
2013 | Opera 15 | ||
2015 | ECMAScript 2015 | Частично поддерживается всеми браузерами |
Internet Explorer 4 и Netscape 4.06 были первыми браузерами, которые стали поддерживать ECMAScript 1.
Internet Explorer 5 был первым браузером, который стал поддерживать ECMAScript 2.
Internet Explorer 5.5 и Netscape 6 были первыми браузерами, которые стали поддерживать ECMAScript 3.
Internet Explorer 9 и Firefox 3.5 были первыми браузерами, которые стали поддерживать ECMAScript 5. При этом IE 9 не поддерживает директиву ECMAScript 5 «use strict».
Chrome 23, IE 10 и Safari 6 были первыми браузерами с полной поддержкой ECMAScript 5.