Литералы объектов — это фундаментальная часть JavaScript, позволяющая нам быстро создавать и инициализировать объекты. Начиная с ES6 и более поздних версий, в JavaScript было внесено несколько улучшений в объектные литералы, что сделало их еще более мощными и краткими. Давайте углубимся в эти улучшения и посмотрим, как они могут сделать наш код чище и эффективнее.
Если при создании объекта имя свойства совпадает с именем переменной, которую вы ему назначаете, вы можете использовать сокращенный синтаксис.
const name = 'John'; const age = 30; // Old way const person = { name: name, age: age }; // New way const person = { name, age }; console.log(person); // { name: 'John', age: 30 }
Этот сокращенный синтаксис уменьшает повторение и делает наш код более кратким.
Документация MDN: инициализатор объекта
Аналогично, при определении методов в объекте мы можем опустить ключевое слово function и двоеточие.
// Old way const calculator = { add: function(a, b) { return a b; } }; // New way const calculator = { add(a, b) { return a b; } }; console.log(calculator.add(5, 3)); // 8
Этот синтаксис чище и легче читается, особенно если в объекте имеется несколько методов.
Документация MDN: определения методов
ES6 позволяет нам использовать выражения для вычисления имен свойств. Это особенно полезно, если вы хотите создать динамические имена свойств.
const prefix = 'user_'; const id = 1234; const user = { [`${prefix}${id}`]: 'John Doe' }; console.log(user.user_1234); // 'John Doe'
Эта функция полезна, когда вам нужно создавать объекты с динамическими ключами на основе некоторой логики или внешних данных.
Документация MDN: имена вычисляемых свойств
ES6 представил новый способ определения методов в литералах объектов с использованием ключевых слов get и set. Это позволяет создавать вычисляемые свойства без явного вызова функции.
const person = { firstName: 'John', lastName: 'Doe', get fullName() { return `${this.firstName} ${this.lastName}`; }, set fullName(name) { [this.firstName, this.lastName] = name.split(' '); } }; console.log(person.fullName); // 'John Doe' person.fullName = 'Jane Smith'; console.log(person.firstName); // 'Jane' console.log(person.lastName); // 'Smith'
Геттеры и сеттеры предоставляют простой способ определения вычисляемых свойств и могут использоваться для добавления проверки или побочных эффектов при получении или установке значений.
Документация MDN: геттер и сеттер
Хотя оператор распространения (...) не является строго частью улучшения объектных литералов, он является мощной функцией, которая хорошо работает с объектными литералами. Он позволяет легко клонировать объекты или объединять несколько объектов.
const defaults = { theme: 'light', fontSize: 14 }; const userPreferences = { fontSize: 16 }; const settings = { ...defaults, ...userPreferences }; console.log(settings); // { theme: 'light', fontSize: 16 }
Оператор распространения позволяет легко создавать новые объекты на основе существующих, что особенно полезно для обеспечения неизменяемости в ваших приложениях.
Документация MDN: синтаксис распространения (...)
Эти усовершенствования объектных литералов в JavaScript предоставляют разработчикам более выразительные и лаконичные способы работы с объектами. Используя эти функции, вы можете писать более чистый и читаемый код, который легче поддерживать.
Помните, что эти функции очень эффективны, но важно использовать их разумно. Всегда отдавайте предпочтение читабельности и удобству сопровождения кода, а не краткости.
Вот краткий обзор поддержки этих функций браузерами:
Особенность | Хром | Firefox | Сафари | Край |
---|---|---|---|---|
Сокращенные свойства | 43 | 33 | 9 | 12 |
Сокращенные методы | 43 | 34 | 9 | 12 |
Имена вычисляемых свойств | 43 | 34 | 8 | 12 |
Методы получения/установки | 1 | 1,5 | 3 | 12 |
Распространение объекта | 60 | 55 | 11.1 | 79 |
Хотя эти улучшения обычно не оказывают существенного влияния на производительность, оператор расширения объекта может быть менее эффективным, чем Object.assign(), для объединения многих свойств. В большинстве случаев преимущество читаемости перевешивает любые незначительные различия в производительности.
Чтобы лучше понять современные манипуляции с объектами в JavaScript, изучите:
Освоив эти улучшения объектных литералов и связанные с ними функции, вы будете хорошо подготовлены к написанию более элегантного и эффективного кода JavaScript.
Если вы считаете эту статью полезной, нажмите кнопку «Подписаться», чтобы получать больше обновлений и полезных ресурсов по JavaScript, Reactjs и Next.js. Вы также можете подписаться на меня в Твиттере @OgDev-01, чтобы получать полезные ресурсы и технические тенденции, или на OpenSauced, чтобы узнать, какой вклад я вношу и что выделяю!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3