Объекты
Объект — это неупорядоченная коллекция пар ключ-значение. Ключ — это строка (или символ), значение — любой тип данных: число, строка, массив, другой объект, функция.
Объекты используются для хранения структурированных данных: профиль пользователя, настройки приложения, ответ от API, данные задачи с метаданными.
Создание объекта
Самый распространённый способ — через литерал:
const user = {
name: 'Анна',
age: 28,
isAdmin: false
};
Можно создать через конструктор, но это редко используется:
const settings = new Object();
settings.theme = 'dark';
settings.language = 'ru';
Литерал {} предпочтительнее: короче, понятнее, быстрее.
Доступ к свойствам
Точечная запись
Если ключ — валидный идентификатор (без пробелов, спецсимволов, не начинается с цифры):
console.log(user.name); // "Анна"
console.log(user.age); // 28
Скобочная запись
Используется, если ключ содержит пробелы, спецсимволы, или если имя свойства динамическое:
console.log(user['name']); // "Анна"
console.log(user['age']); // 28
const prop = 'isAdmin';
console.log(user[prop]); // false
Также скобки нужны для ключей с пробелами:
const person = {
'first name': 'Иван',
'last-name': 'Петров'
};
console.log(person['first name']); // "Иван"
console.log(person['last-name']); // "Петров"
Используйте точечную запись, если возможно — она читаемее. Используйте скобочную, когда нужно динамическое имя свойства.
Динамическое добавление и удаление
Добавление
Просто присваиваем значение новому ключу:
user.email = 'anna@example.com';
user['phone'] = '+7 (999) 123-45-67';
Теперь объект выглядит так:
{
name: 'Анна',
age: 28,
isAdmin: false,
email: 'anna@example.com',
phone: '+7 (999) 123-45-67'
}
Удаление
Оператор delete:
delete user.age;
console.log(user.age); // undefined
Удаление не влияет на структуру других свойств — просто убирает пару ключ-значение.
Методы объектов
Функция может быть значением свойства — тогда она называется методом:
const calculator = {
a: 5,
b: 3,
add() {
return this.a + this.b;
},
multiply() {
return this.a * this.b;
}
};
console.log(calculator.add()); // 8
console.log(calculator.multiply()); // 15
this внутри метода ссылается на сам объект — это важно для доступа к его свойствам.
Объекты передаются по ссылке
Это ключевая особенность в сравнении с примитивными типами данных.
Когда вы присваиваете объект переменной, вы не копируете его содержимое — вы копируете ссылку на место в памяти.
const user1 = { name: 'Игорь' };
const user2 = user1; // Это не копия — это та же самая ссылка
user2.name = 'Мария';
console.log(user1.name); // "Мария" — изменилось и в user1!
Это значит:
- Изменение одного объекта влияет на все переменные, ссылающиеся на него.
- При передаче объекта в функцию — функция может изменить его содержимое.
Чтобы избежать этого, нужно создавать копию объекта — об этом позже в разделе про распаковку.
Пример опасности:
function updateName(user) {
user.name = 'Аноним';
}
const profile = { name: 'Сергей' };
updateName(profile);
console.log(profile.name); // "Аноним" — исходный объект изменён!
Всегда помните: объекты — ссылочные типы. Если вам нужна независимая копия — используйте клонирование.