Объекты: основы #
Объект в JavaScript — составное значение: набор пар «ключ — значение», где ключ — строка или Symbol, а значение — любой тип данных. Объекты описывают сущности предметной области: корзину покупок, профиль пользователя, элемент плейлиста или тело HTTP-запроса.
Литерал объекта #
Самый частый способ создать объект — литерал в фигурных скобках:
const cart = {
id: 'cart-7a2',
currency: 'RUB',
items: [],
updatedAt: null,
}
Ключи без кавычек — это идентификаторы; значения разделяются запятыми. Последняя запятая после последнего свойства допустима (trailing comma).
Для пустого объекта достаточно {}. Альтернатива — new Object(), но в прикладном коде почти всегда используют литерал.
Доступ к свойствам #
Два эквивалентных способа чтения и записи:
| Нотация | Когда удобна |
|---|---|
точечная obj.key | ключ — валидный идентификатор, известен на этапе написания кода |
скобочная obj['key'] | ключ в переменной, содержит пробелы или спецсимволы |
const profile = {
userId: 'u-104',
displayName: 'Мария К.',
'preferred-lang': 'ru',
}
profile.displayName // "Мария К."
profile['preferred-lang'] // "ru"
const field = 'userId'
profile[field] // "u-104"
Обращение к несуществующему свойству возвращает undefined, а не ошибку:
profile.phone // undefined
Добавление и изменение свойств #
Объекты мутабельны: можно добавлять, перезаписывать и удалять свойства после создания (если объект не заморожен — об этом в продвинутых темах).
const playlist = {
title: 'Focus Tracks',
trackCount: 0,
}
playlist.trackCount = 12
playlist.isPublic = true
playlist['coverUrl'] = '/covers/focus.jpg'
Сокращённая запись при совпадении имени переменной и ключа:
const title = 'Evening Mix'
const ownerId = 'u-104'
const eveningPlaylist = { title, ownerId }
// то же, что { title: title, ownerId: ownerId }
Вычисляемые ключи — имя свойства задаётся выражением в квадратных скобках при создании:
const prefix = 'api'
const payload = {
[`${prefix}Version`]: 2,
[`${prefix}Key`]: 'sk_live_***',
}
// { apiVersion: 2, apiKey: 'sk_live_***' }
Удаление свойств #
Оператор delete убирает собственное свойство объекта:
const draft = {
status: 'draft',
internalNote: 'не публиковать',
}
delete draft.internalNote
// draft: { status: 'draft' }
delete возвращает true, если удаление прошло (или свойства не было), и false для неизменяемых свойств. На производительность частых delete в горячих циклах стоит обратить внимание; в обычном прикладном коде это редкая операция.
Чтобы «обнулить» значение, но оставить ключ, присвойте null или undefined — структура объекта для Object.keys сохранится.
Вложенные объекты #
Свойство может быть другим объектом или массивом — так строятся API payload и доменные модели:
const apiPayload = {
event: 'cart.updated',
data: {
cartId: 'cart-7a2',
totals: { subtotal: 1490, discount: 0 },
items: [{ sku: 'kb-01', qty: 1 }],
},
meta: { sentAt: '2026-07-14T12:00:00Z' },
}
apiPayload.data.totals.subtotal // 1490
apiPayload['data']['items'][0].sku // "kb-01"
Глубокая вложенность читается цепочкой точек; при динамических ключах комбинируйте скобочную нотацию на нужном уровне.
Проверка наличия свойства #
Оператор in проверяет ключ в объекте и в цепочке прототипов; hasOwnProperty — только собственные свойства (подробнее о прототипах — см. раздел ООП):
const item = { sku: 'kb-01', qty: 1 }
'sku' in item // true
item.hasOwnProperty('qty') // true
item.hasOwnProperty('toString') // false — унаследованный метод
Для собственных ключей в современном коде часто используют Object.hasOwn(item, 'sku') — тот же смысл, короче запись.
Объект как ссылка #
Переменная хранит не «копию объекта», а ссылку на него в памяти. Подробнее о копировании — в статье Копирование и ссылки.
const original = { count: 1 }
const alias = original
alias.count = 2
original.count // 2 — один и тот же объект
Тип object для переменных с объектами описан в разделе переменные и типы данных.
Итог #
- Объект — коллекция пар ключ–значение; создаётся литералом
{ }. - Чтение и запись: точечная и скобочная нотация; скобки нужны для динамических ключей.
- Свойства добавляют присваиванием; удаляют через
delete. - Сокращённая запись и вычисляемые ключи упрощают сборку объектов из переменных.
- Переменная с объектом держит ссылку, а не отдельную копию данных.