Понимание объектов в JavaScript
Введение
Объект в JavaScript — это тип данных, состоящий из набора имен или ключей и значений, представленных парами имя:значение. Пары имя:значение могут состоять из свойств, которые могут содержать данные любого типа, включая строки, числа и логические значения, а также методы, которые являются функциями, содержащимися внутри объекта.
Объекты в JavaScript — это автономные объекты, которые можно сравнить с объектами в реальной жизни. Например, книга может быть объектом, который вы бы описали по названию, автору, количеству страниц и жанру. Точно так же автомобиль может быть объектом, который вы бы описали по цвету, марке, модели и мощности. Массивы JavaScript также являются типом объекта.
Объекты являются неотъемлемым и основополагающим аспектом большинства программ на JavaScript. Например, объект учетной записи пользователя может содержать такие данные, как имена пользователей, пароли и адреса электронной почты. Другим распространенным вариантом использования является корзина для покупок на веб-платформе для покупок, которая может состоять из массива множества объектов, содержащих всю соответствующую информацию для каждого товара, такую как название, цена и вес для информации о доставке. Список дел — еще одно распространенное приложение, которое может состоять из объектов.
В этом руководстве мы рассмотрим, как создать объект, что такое свойства и методы объекта, а также как получить доступ, добавить, удалить, изменить и просмотреть свойства объекта.
Создание объекта
Объект — это тип данных JavaScript, точно так же, как число или строка также являются типом данных. Как тип данных объект может содержаться в переменной.
Есть два способа создать объект в JavaScript:
- Литерал объекта, в котором используются фигурные скобки:
{}
- Конструктор объекта, использующий ключевое слово
new
Мы можем создать пример пустого объекта, используя оба метода в демонстрационных целях.
Во-первых, литерал объекта.
// Initialize object literal with curly brackets
const objectLiteral = {};
Литерал объекта инициализирует объект фигурными скобками.
В следующем примере мы будем использовать конструктор объектов.
// Initialize object constructor with new Object
const objectConstructor = new Object();
Те же данные были созданы с помощью метода конструктора объекта, который инициализируется с помощью new Object()
.
Оба этих подхода создадут пустой объект. Использование объектных литералов является более распространенным и предпочтительным методом, поскольку он менее подвержен несоответствиям и неожиданным результатам.
Мы можем создать пример объекта, содержащегося в переменной gimli
, для описания персонажа.
// Initialize gimli object
const gimli = {
name: "Gimli",
race: "dwarf",
weapon: "axe",
greet: function() {
return `Hi, my name is ${this.name}!`;
},
};
Наш новый объект gimli
имеет три свойства. Каждое свойство состоит из пары имя:значение, также известной как пара ключ:значение. weapon
— это одно из имен свойств, которое связано со значением свойства axe
, строкой. Он имеет один метод с именем метода greet
и значением метода, состоящим из содержимого функции.
В greet
вы можете заметить ключевое слово this
. При использовании this
внутри объекта он относится к текущему объекту, в данном случае gimli
.
Отправка gimli
на консоль распечатает весь объект.
gimli;
Output{name: "Gimli", race: "dwarf", weapon: "axe", greet: ƒ}
Этот вывод может отображаться по-разному в зависимости от того, какую консоль вы используете, но вы должны заметить, что все значения, переданные объекту, отображаются в выводе.
Далее мы рассмотрим свойства и методы объекта JavaScript.
Свойства и методы
Объекты могут иметь свойства и методы.
Свойство — это связь между именем (ключом) и значением внутри объекта, и оно может содержать любой тип данных. Свойство обычно относится к характеристике объекта.
Метод — это функция, являющаяся значением свойства объекта, и, следовательно, задача, которую может выполнять объект.
Простой способ запомнить разницу между свойствами объекта и методами — думать о свойстве как о существительном, а о методе — как о глаголе. имя
, раса
и оружие
— все это существительные, связанные с объектом и свойствами. fight()
или talk()
— это глаголы, которые можно использовать в качестве определения функции метода.
Доступ к свойствам объекта
Есть два способа получить доступ к свойствам объекта.
- Обозначение через точку:
.
- Квадратные скобки:
[]
Давайте вернемся к нашему исходному объекту примера, gimli
.
const gimli = {
name: "Gimli",
race: "dwarf",
weapon: "axe",
greet: function() {
return `Hi, my name is ${this.name}!`;
},
};
Если мы хотим получить значение свойства weapon
, мы можем сделать это с помощью записи объекта через точку, введя имя переменной объекта, за которым следует точка (.
) и имя свойства или метода.
// Retrieve the value of the weapon property
gimli.weapon;
Output"axe"
gimli.weapon
выводит значение свойства, которое равно топору
. Мы также можем получить те же данные с помощью нотации объектной скобки. Подобно тому, как вы могли бы индексировать строку и обращаться к ней, синтаксис записи в квадратных скобках представляет собой две квадратные скобки ([]
), заключающие в себе имя свойства.
// Retrieve the value of the weapon property
gimli["weapon"];
Output"axe"
Регулярно используются как запись через точку, так и запись в квадратных скобках. Точечная запись быстрее и читабельнее, но имеет больше ограничений. Нотация скобок позволяет получить доступ к именам свойств, хранящимся в переменной, и должна использоваться, если свойство объекта содержит какой-либо специальный символ.
Чтобы получить объектный метод, вы должны вызывать его почти так же, как вы вызываете обычную функцию, просто присоединенную к объектной переменной.
gimli.greet();
Output"Hi, my name is Gimli!"
В приведенном выше примере мы видим, что возвращается строковое значение для метода объекта greet()
.
Теперь мы можем перейти к изменению свойств объекта, добавив пары имя:значение или изменив существующие.
Добавление и изменение свойств объекта
Чтобы добавить новое свойство к объекту, вы должны присвоить новое значение свойству с помощью оператора присваивания (=
).
Например, мы можем добавить числовой тип данных к объекту gimli
в качестве нового свойства age
. Для добавления нового свойства объекта можно использовать как нотацию с точкой, так и скобки.
// Add new age property to gimli
gimli.age = 139;
// Add new age property to gimli
gimli["age"] = 139;
Мы можем получить доступ к этому значению так же, как и выше, либо с точечной записью, либо с записью скобок.
gimli.age;
Output139
Метод также может быть добавлен к объекту с помощью того же процесса.
// Add new fight method to gimli
gimli.fight = function() {
return `Gimli attacks with an ${this.weapon}.`;
}
После того, как мы создали этот новый объектный метод, мы можем вызвать его, как мы делали выше.
gimli.fight();
Output"Gimli attacks with an axe."
Используя тот же метод, свойство объекта можно изменить, присвоив новое значение существующему свойству.
// Update weapon from axe to battle axe
gimli.weapon = "battle axe";
В этот момент, если мы вызовем объект, мы увидим все наши дополнения и модификации.
gimli;
Output{name: "Gimli", race: "dwarf", weapon: "battle axe", age: 139, greet: ƒ, fight: ƒ}
С помощью операции присваивания мы можем изменить свойства и методы объекта JavaScript.
Удаление свойств объекта
Чтобы удалить свойство объекта, вы будете использовать ключевое слово delete
. delete
— это оператор, который удаляет свойство из объекта.
В приведенном ниже примере мы удалим свойство weapon
из gimli
с помощью delete
.
// Remove weapon from gimli
delete gimli.weapon;
Outputtrue
Операция delete
оценивается как true
, если свойство было успешно удалено или если оно было использовано для несуществующего свойства.
Мы можем проверить вывод gimli
, чтобы убедиться, что все получилось.
gimli;
Output{name: "Gimli", race: "dwarf", age: 139, greet: ƒ, fight: ƒ}
В приведенном выше выводе имя weapon
и связанное с ним значение больше не доступны, что показывает, что мы успешно удалили свойство.
В следующем разделе мы рассмотрим способы перебора объектов в JavaScript.
Перебор свойств объекта
В JavaScript есть встроенный тип цикла for
, специально предназначенный для перебора свойств объекта. Это называется циклом for...in
.
Вот упрощенная версия нашего основного примера объекта, gimli
.
const gimli = {
name: "Gimli",
race: "dwarf",
weapon: "battle axe",
};
Мы можем использовать for...in
, чтобы просмотреть все свойства gimli
и вывести их на консоль. Используя скобки, мы можем получить значение свойства как переменную, в данном случае key
.
// Iterate through properties of gimli
for (let key in gimli) {
console.log(gimli[key]);
}
OutputGimli
dwarf
battle axe
Мы также можем получить само имя свойства, используя только первую переменную в цикле for...in
. Мы использовали строковый метод для преобразования значений ключей в верхний регистр.
// Get keys and values of gimli properties
for (let key in gimli) {
console.log(key.toUpperCase() + ':', gimli[key]);
}
OutputNAME: Gimli
RACE: dwarf
WEAPON: battle axe
Цикл for...in
не следует путать с циклом for...of
, который используется исключительно для типа объекта Array. Вы можете узнать больше об итерации по массивам в учебнике «Понимание массивов в JavaScript».
Еще одним полезным методом перечисления является метод Object.keys()
, который возвращает массив ключей объекта.
// Initialize method on gimli object to return property keys
Object.keys(gimli);
Output["name", "race", "weapon"]
Этот метод позволяет нам работать с ключами или именами объекта как с массивом, поэтому вы можете использовать все методы, доступные для массивов JavaScript.
Заключение
Объекты — чрезвычайно полезная и универсальная функция языка программирования JavaScript. Они являются одними из основных строительных блоков для написания кода на JavaScript и представляют собой практичный способ организации связанных данных и функций. Списки дел, корзины покупок, учетные записи пользователей и местоположения на веб-карте — это лишь некоторые из многих примеров реальных объектов JavaScript, с которыми вы можете столкнуться.
В этом руководстве мы узнали разницу между свойствами и методами, как создавать объекты и как добавлять, удалять, изменять и циклически перебирать свойства объекта. Чтобы узнать больше об объектах JavaScript, прочтите статью «Работа с объектами в сети разработчиков Mozilla».