Object
Object
Технический фундамент объектной структуры
Объекты задают форму доменных сущностей, поэтому важны их инварианты:
- стабильный набор ключей между слоями системы;
- контроль мутаций и точек изменения данных;
- явные проверки существования свойств перед использованием;
- осознанный выбор копирования (поверхностное/глубокое по задаче).
Чем четче модель объекта, тем дешевле поддержка и рефакторинг кода.
Почему object - основной контейнер данных
В приложениях почти все сущности описываются объектами: пользователь, товар, заказ, конфиг, ответ API. Объект объединяет связанные значения по схеме "ключ -> значение".
Ключевой момент: объект помогает держать структуру данных в одном месте, а не в россыпи отдельных переменных.
Проверь себя: почему userName, userEmail, userRole в трех переменных сложнее поддерживать, чем один user объект?
Создание объекта и доступ к полям
const user = {
id: 1,
name: 'Anna',
isActive: true,
};
console.log(user.name);
console.log(user['id']);
Доступ возможен через точку и через скобки.
Смотри, что важно: если ключ динамический, используй скобки.
const field = 'name';
console.log(user[field]);
Изменение и добавление свойств
user.isActive = false;
user.email = 'anna@mail.com';
Объекты в JS изменяемы по умолчанию.
Здесь часто путаются: const user не запрещает менять свойства, он запрещает переназначить саму переменную user.
Проверка существования ключа
console.log('name' in user); // true
console.log(user.age === undefined); // true (если нет поля)
Смотри, что важно:
obj.key === undefinedможет бытьtrue, даже если ключ существует, но в нем явно лежитundefined;- оператор
inпроверяет ключ не только в самом объекте, но и в прототипной цепочке.
const obj = { a: undefined };
console.log(obj.a === undefined); // true
console.log('a' in obj); // true
console.log(obj.hasOwnProperty('a')); // true
Для перечисления ключей используют Object.keys.
console.log(Object.keys(user));
Проверь себя: почему проверка obj.key === undefined не всегда равна "ключ точно отсутствует"?
Поверхностное копирование объекта
const original = { theme: 'dark' };
const copy = { ...original };
Это удобно для создания нового объекта без мутации исходного.
Анти-провал: помни, что spread дает поверхностную копию, вложенные объекты останутся общими.
Мини-сценарий: профиль пользователя
function buildProfile(name, email) {
return {
name,
email,
createdAt: Date.now(),
};
}
Такой объект легко передавать между слоями: UI -> API -> логика.
Если вход пустой, можно добавить валидацию до сборки объекта.
Частые ошибки новичков
- Думать, что
constделает объект полностью неизменяемым. - Не проверять наличие поля перед использованием.
- Случайно мутировать общий объект в нескольких местах.
- Смешивать в одном объекте несвязанные данные.
Анти-провал: у объекта должна быть понятная ответственность (например, только данные профиля, а не "всё подряд").
Что будет, если изменить вход
Если в buildProfile передать пустой email, объект все равно создастся. Это значит, что объект как структура не заменяет бизнес-валидацию. Сначала проверяй данные, потом формируй объект.
Проверь себя: где лучше валидировать email - до создания объекта или после? Почему?
Краткий итог
object- базовая структура для связанных данных в JavaScript.- Свойства можно читать, менять и добавлять динамически.
constзащищает ссылку, но не защищает поля от мутаций.- Для безопасного кода нужны проверки ключей и аккуратная работа с копиями.
- Хорошая объектная модель делает данные понятными и снижает хаос в логике приложения.