Недавно у меня была возможность выступить на конференции JS, и это был отличный опыт. Моя тема была связана с рядом JS-доменов, одним из самых важных является ECMAScript.
Какая связь между ECMAScript и JavaScript? ECMAScript - это стандарт для языков сценариев, а JavaScript - самая популярная реализация стандарта ECMAScript. Давайте посмотрим на путь ES от зарождения до недавнего выпуска и посмотрим, какие возможности открывают возможности ES2015 +.
История ECMAScript
Первый выпуск ECMAScript произошел в 1997 году, и в последующие годы было выпущено несколько выпусков подряд. Затем произошел продолжительный пробел, за которым последовал выпуск ECMAScript5 в 2009 году.
ES5 включал в себя набор наиболее распространенных функций, и только в выпуске 2015 года было введено множество функций, и выпуски стали ежегодными.
Почему? Потому что огромный выпуск полон ошибок и есть много простых функций, которые нужно было не выпускать до тех пор, пока не будут готовы более сложные части. В то же время на разработчиков оказывалось огромное давление, заставляющее их работать быстро, что приводило к низкому качеству кода.
Это когда группа технических энтузиастов сформировала комитет под названием TC39, чтобы решить, что будет включено в следующие выпуски ES. Как это происходит? Есть 5 этапов, от представления идей до фактических модульных тестов.
ECMAScript 2016
В версии ECMAScript 2016 года были выпущены 2 функции:
- Array.prototype.includes ()
- Оператор возведения в степень
Давайте посмотрим на пару примеров:
В приведенном ниже примере у нас есть список пальцев. Проблема заключается в том, чтобы найти в массиве необходимый элемент, в нашем случае это большой палец.
До ES2016, чтобы найти элемент, нам нужно было найти его положение и увидеть его значение. Если значение отличное от -1, значит, элемент присутствует. Согласитесь, не самый простой способ. Итак, в ES2016 была введена функция includes, которая позволяет напрямую узнать, присутствует ли конкретная функция или нет.
Следующая функция в ES2016 - оператор возведения в степень. Раньше вам приходилось использовать карту, но с оператором возведения в степень вычисление мощности можно было более кратко выразить с помощью инфиксной записи. Здесь ** используется для обозначения оператора.
ECMAScript 2017
ES 2017 обладает рядом функций:
Object.entries ()
Этот метод имеет следующую сигнатуру:
Объект .entries (значение: любое): Массив ‹[строка, любое]›
Если в структуре данных JavaScript есть ключи и значения, то запись представляет собой пару "ключ-значение", закодированную как массив из 2 элементов. Object.entries (x) приводит x к объекту и возвращает записи его перечислимых свойств со строковыми ключами в массиве:
Object.values ()
Object.values () имеет следующую сигнатуру:
Объект. значения (значение: любое): Массив ‹any›
Он работает так же, как Object.entries (), но, как следует из названия, возвращает только значения собственных перечислимых свойств со строковыми ключами:
Object.getOwnPropertyDescriptors (объект)
Это возвращает значение и позволяет нам выполнить глубокое клонирование значений и дескрипторов:
String.prototype.padStart (maxLength, fillString = ’‘)
Этот метод (возможно, неоднократно) добавляет к получателю префикс fillString, пока его длина не станет maxLength. При необходимости используется фрагмент fillString, чтобы длина результата была точно maxLength.
Если длина получателя равна или больше, чем maxLength, он возвращается без изменений.
Если maxLength и fillString.length одинаковы, fillString в конце становится маской, в которую вставляется получатель.
Если вы опустите fillString, будет использована строка с одним пробелом (‘‘):
String.prototype.padEnd (maxLength, fillString = ’‘)
padEnd () работает аналогично padStart (), но вместо того, чтобы вставлять повторяющуюся fillString в начале, он вставляет его в конец.
Только последняя строка реализации padEnd () отличается от реализации padStart ():
Завершающие запятые в литералах объектов и литералах массивов
Завершающие запятые игнорируются в объектных литералах, а также в литералах массива. Почему это полезно? Есть два преимущества.
Во-первых, перегруппировать элементы проще, потому что вам не нужно добавлять и удалять запятые, если последний элемент меняет свое положение.
Во-вторых, это помогает системам контроля версий отслеживать, что на самом деле изменилось. Например, переход от:
Вы можете спросить, это вообще законно? Да, с момента недавнего релиза!
Это много для стандартных функций ES2017. Следите за обновлениями моей следующей публикации «Асинхронный / ожидающий JavaScript, разделяемая память и атомики», которая скоро выйдет в эфир!
Об авторе:
Лилит Тадевосян - девушка JavaScript-ниндзя со страстью к переменам и развитию технологий.
"Давайте поговорим!"