Объект (object) - это структура данных, которая хранит пары “ключ - значение”. Объекты удобны, когда нужно описывать сущности со свойствами: например, пользователь с именем и возрастом, настройки, результаты вычислений.
Как создать объект
Самый частый способ - литерал объекта:
const user = {
name: "Sam",
age: 20,
isActive: true
};
console.log(user);
Пустой объект:
const data = {};
Свойства: ключи и значения
Ключи в объекте обычно строки (даже если записаны без кавычек). Значения могут быть любыми типами: числами, строками, массивами, другими объектами, функциями.
const profile = {
id: 1,
name: "Alex",
tags: ["js", "web"],
settings: { theme: "dark" }
};
Чтение свойства: точка
Если имя свойства известно заранее и подходит под формат идентификатора, используют точку.
const user = { name: "Sam", age: 20 };
console.log(user.name); // "Sam"
console.log(user.age); // 20
Если свойства нет, будет undefined:
const user = { name: "Sam" };
console.log(user.email); // undefined
Запись свойства: точка
Свойство можно создать или изменить.
const user = { name: "Sam" };
user.age = 20;
user.name = "Alex";
console.log(user); // { name: "Alex", age: 20 }
Чтение и запись: квадратные скобки
Квадратные скобки нужны, когда:
- имя свойства хранится в переменной
- в ключе есть пробелы или дефисы
- ключ не подходит для записи через точку
Ключ в переменной
const user = { name: "Sam", age: 20 };
const key = "name";
console.log(user[key]); // "Sam"
Ключ с дефисом или пробелом
const obj = {
"background-color": "#000",
"full name": "Sam Doe"
};
console.log(obj["background-color"]); // "#000"
console.log(obj["full name"]); // "Sam Doe"
Запись через скобки
const obj = {};
const key = "status";
obj[key] = "ok";
console.log(obj); // { status: "ok" }
Удаление свойства
Свойство можно удалить оператором delete.
const user = { name: "Sam", age: 20 };
delete user.age;
console.log(user); // { name: "Sam" }
Обычно delete используют редко. Часто проще не удалять свойство, а хранить null или undefined по смыслу, но это зависит от задачи.
Проверка наличия свойства
Через сравнение с undefined
Так можно проверить, что значение задано, но важно помнить: свойство может существовать и иметь значение undefined.
const user = { name: "Sam" };
console.log(user.email === undefined); // true
Оператор in
in проверяет наличие ключа в объекте (включая унаследованные свойства).
const user = { name: "Sam" };
console.log("name" in user); // true
console.log("email" in user); // false
Для учебных примеров этого достаточно. Более точные проверки будут дальше, когда появится тема прототипов.
Объект - ссылочный тип
Как и массивы, объекты передаются по ссылке.
const a = { n: 1 };
const b = a;
b.n = 99;
console.log(a.n); // 99
console.log(b.n); // 99
Если нужна поверхностная копия, можно использовать spread:
const a = { n: 1, m: 2 };
const b = { ...a };
b.n = 99;
console.log(a); // { n: 1, m: 2 }
console.log(b); // { n: 99, m: 2 }
Частые ошибки
1) Путаница: точка vs скобки
Если ключ лежит в переменной, точка не подойдет:
const user = { name: "Sam" };
const key = "name";
console.log(user.key); // undefined
console.log(user[key]); // "Sam"
2) Ошибка при чтении вложенного свойства
Если промежуточный объект отсутствует, будет TypeError:
const user = { name: "Sam" };
try {
console.log(user.settings.theme);
} catch (e) {
console.log(e.name); // "TypeError"
}
Дальше будет способ писать такие проверки проще (optional chaining).
Что стоит запомнить
- Объект хранит пары “ключ - значение”.
- Чтение и запись через точку удобны, когда ключ известен.
- Скобки нужны для ключей в переменной или ключей с пробелами/дефисами.
- Если свойства нет, чтение даст
undefined. - Объекты передаются по ссылке, для копии используют
{ ...obj }.