ES6 в действии: расширенные литералы объекта JavaScript

Представляем Luna - тестирование JavaScript, выполняемое правильно

От автора: в этой статье рассматривается, какими возможностями обладает литерал объекта JavaScript, особенно в свете последних обновлений ECMAScript. В JavaScript мощная система создания объектов с использованием литерала. Новые функции, появившиеся в ES2015 (ES6), упрощают обработку объектов во всех современных браузерах (не IE) и Node.js.

Создание объектов на некоторых языках может быть дорогостоящим с точки зрения времени разработки и вычислительной мощности, когда class должен быть объявлен до того, как что-либо может быть достигнуто. В JavaScript легко создавать объекты «на лету». Например:

Объекты одноразового использования широко используются. Примеры включают настройки конфигурации, определения модулей, параметры метода, возвращаемые значения из функций и т. д. ES2015 (ES6) добавил ряд функций для улучшения объектных литералов.

Инициализация объектов из переменных

Свойства объектов часто создаются из переменных с тем же именем. Например:

В ES6 нет необходимости в неприятных повторениях! …

Это может быть полезно для возвращаемых объектов при использовании раскрывающего шаблона модуля, который (эффективно) обозначает код пространства имен, чтобы избежать конфликтов имен. Например:

Возможно, вы видели, как он использовался в модулях ES6:

Сокращение определения метода объекта

Методы объектов в ES5 требуют оператора function. Например:

Это больше не требуется в ES6; он допускает следующий сокращенный синтаксис:

Здесь нельзя использовать синтаксис => функции, потому что для этого метода требуется имя. Тем не менее, вы можете использовать стрелочные функции, если вы называете каждый метод напрямую (например, ES5). Например:

Динамические ключи свойств

В ES5 невозможно было использовать переменную для имени ключа, хотя она могла быть добавлена после создания объекта. Например:

Ключи объектов можно динамически назначать в ES6, помещая выражение в [ квадратные скобки ]. Например:

Любое выражение может использоваться для создания ключа. Например:

Динамический ключ может использоваться как для методов, так и для свойств. Например:

Нужно ли создавать динамические свойства и методы — другое дело. Код может быть трудночитаемым, и может быть предпочтительнее создавать фабрики объектов или классы.

Деструктуризация (переменные из свойств объекта)

Часто бывает необходимо извлечь значение свойства из объекта в другую переменную. Это должно быть явно объявлено в ES5. Например:

ES6 поддерживает деструктуризацию: вы можете создать переменную с тем же именем, что и свойство эквивалентного объекта. Например:

Также возможно присвоить свойства переменным с любым именем, используя нотацию { propertyName: newVariable }. Например:

Более сложные объекты с вложенными массивами и под-объектами также могут ссылаться на деструктурирующие назначения. Например:

Это изначально кажется сложным, но помните, что во всех назначениях деструктуризации:

левая часть присваивания — источник деструктуризации — массив или объект, который содержит извлеченные данные

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

Существует ряд предостережений. Вы не можете запустить инструкцию с фигурной скобкой, потому что она выглядит как блок кода. Например:

Вы должны либо объявить переменные — например:

или использовать круглые скобки, если переменные уже объявлены — например:

Поэтому вы должны быть осторожны, чтобы не смешивать объявленные и необъявленные переменные. Существует множество ситуаций, когда полезно деструктуризация объекта.

Параметры функции по умолчанию

Часто проще передать один объект функции, чем использовать длинный список аргументов. Например:

В ES5 необходимо проанализировать объект, чтобы установить соответствующие значения по умолчанию. Например:

В ES6 мы можем присвоить значение по умолчанию любому параметру. Например:

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

Считаете ли вы, что этот код легче читать, это другое дело!

Парсинг возвращаемых объектов

Функции могут возвращать только одно значение, но это может быть объект с сотнями свойств и / или методов. В ES5 необходимо получить возвращенный объект, а затем извлечь значения соответственно. Например:

Деструктуризация ES6 упрощает этот процесс, и нет необходимости сохранять объект как переменную:

Возможно, вы видели аналогичные назначения в коде Node.js. Например, если вам нужны только методы File System ( fs ) readFile и writeFile , вы можете ссылаться на них напрямую. Например:

ES2018 (ES9) Свойства Rest/Spread

В ES2015 параметр rest и spread оператор ( … ) применяется только к массивам. ES2018 обеспечивает аналогичную функцию rest/spread для объектов. Основной пример:

Вы можете использовать эту технику для передачи значений функции:

Вы можете использовать только одно свойство rest в конце объявления. Кроме того, он работает только на верхнем уровне каждого объекта, а не на под-объектах.

Оператор распространения может использоваться в других объектах. Например:

Вы можете использовать оператор spread для клонирования объектов ( obj2 = { …obj1 }; ), но имейте в obj2 = { …obj1 };, что вы получаете только мелкие копии. Если свойство содержит другой объект, клон будет ссылаться на тот же объект.

ES2018 (ES9) поддержка свойств rest/spread неоднозначна, но доступна в Chrome, Firefox и Node.js 8.6+.

Объектные литералы всегда были полезны. Новые функции, введенные в ES2015, принципиально не изменили работу JavaScript, но они сохраняют усилия по набору текста и приводят к более четкому и более сжатому коду.

Автор: Craig Buckler

Источник: //www.sitepoint.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: