Объекты — пары ключ-значение
Если массив — это список, то объект — это «карточка» с подписанными полями. Имя, возраст, email — у каждого товара / пользователя / запроса есть свои поля. ИИ генерирует объекты везде — props компонентов, тела запросов, конфиги.
Объект = карточка
Объект задаётся фигурными скобками. Внутри — пары ключ: значение, разделённые запятыми. Ключ обычно строка (без кавычек если простой). Значение — что угодно: строка, число, массив, другой объект, функция.
Доступ к полям
Два способа: точкой (user.name) и квадратными скобками (user["name"]). Точка короче и чаще используется. Скобки нужны когда имя поля в переменной (user[fieldName]) или с пробелами (obj["with spaces"]). Если поля нет — вернёт undefined, не ошибку.
Опциональная цепочка `?.`
Если объект может быть null/undefined — обращение user.name бросит ошибку. Спасает ?.: user?.name вернёт undefined без ошибки если user пустой. Цепочки: user?.profile?.address?.city — если на любом шагу null, всё выражение вернёт undefined. ИИ часто пишет ?. — теперь ты знаешь зачем.
Деструктуризация
Вместо
const { name, age } = user;. Достали сразу. С переименованием: const { name: имя } = user. С дефолтом:
В функциях:
Это везде в React — props почти всегда деструктурируются.
Spread и копирование
{ ...obj } — копия объекта. { ...obj, name: "новое" } — копия с заменой одного поля. Так в React обновляют объекты в state, не меняя оригинал. Object.keys(obj), Object.values(obj), Object.entries(obj) — превращают объект в массивы для итерации.
const пользователь = {
имя: 'Алексей',
возраст: 28,
email: 'a@example.com',
адрес: { город: 'Львов', улица: 'Шевченко 12' },
любитКофе: true,
};
// Доступ
console.log(пользователь.имя); // 'Алексей'
console.log(пользователь['email']); // 'a@example.com'
console.log(пользователь.адрес.город); // 'Львов'
// ?. защита от null
const X = null;
console.log(X?.имя); // undefined, не ошибка
// Деструктуризация
const { имя, возраст } = пользователь;
console.log(имя, возраст); // Алексей 28
// С дефолтом
const { телефон = 'не указан' } = пользователь;
console.log(телефон); // 'не указан'
// Вложенная деструктуризация
const { адрес: { город } } = пользователь;
console.log(город); // 'Львов'
// Spread — копия с изменением
const обновлённый = { ...пользователь, возраст: 29 };
// пользователь не изменился, обновлённый — новый объект
// Массивы из объекта
console.log(Object.keys(пользователь)); // ['имя', 'возраст', 'email', ...]
console.log(Object.entries(пользователь)); // [['имя', 'Алексей'], ...]
// Удалить поле без мутации
const { email: _, ...безEmail } = пользователь;
// безEmail — копия без поля emailОбъекты на практике — деструктуризация и spread