Кратко
Объект — это коллекция свойств: ключ/значение. Объекты позволяют группировать связанные данные: { name: 'Анна', age: 25 }. Свойства доступны через точку (obj.key) или скобки (obj['key']). Методы — это функции внутри объекта.
Подробно
Объекты — основная структура данных в JavaScript. Они хранят данные в виде пар «ключ → значение».
Создание объекта: const user = { name: 'Анна', age: 25, isStudent: true };
Доступ к свойствам: user.name // 'Анна' (dot notation) user['age'] // 25 (bracket notation)
Bracket notation нужна:
- Когда ключ — переменная: user[key]
- Когда ключ содержит спецсимволы: user['my-key']
Изменение свойств: user.age = 26; user['isStudent'] = false;
Добавление свойств: user.email = 'anna@example.com';
Удаление свойств: delete user.email;
Методы (функции внутри объекта): const calculator = { add(a, b) { return a + b; }, multiply(a, b) { return a * b; } }; calculator.add(2, 3); // 5
Ссылочная природа: const a = { x: 1 }; const b = a; // b ссылается на тот же объект b.x = 2; console.log(a.x); // 2! (а тоже изменилась!)
Ментальная модель
Объект — как шкаф с ящиками. Каждый ящик имеет наклейку (ключ) и содержимое (значение). Можно открыть ящик по наклейке (dot/bracket notation) или по переменной (только bracket).
Примеры
**Самый простой:**
const person = {
name: 'Анна',
age: 25
};
console.log(person.name); // 'Анна'
console.log(person.age); // 25Объект хранит связанные данные: имя и возраст — про одного человека.
**Простой:**
const user = {
name: 'Анна',
greet() {
return `Привет, меня зовут ${this.name}`;
}
};
console.log(user.greet()); // Привет, меня зовут АннаМетод — это функция внутри объекта. this ссылается на сам объект.
**Реальный пример:**
const original = { name: 'Анна', scores: [90, 85, 95] };
const copy = original;
copy.name = 'Пётр';
console.log(original.name); // 'Пётр' (изменился оригинал!)
// Чтобы создать копию:
const realCopy = { ...original };
realCopy.name = 'Мария';
console.log(original.name); // 'Пётр' (оригинал не изменился)Объекты передаются по ссылке. copy — это не копия, а другое имя на тот же объект. Spread {} создаёт поверхностную копию (shallow copy): вложенные объекты и массивы, как scores, остаются общими. Это пример будущей темы: синтаксис spread {...} полностью разбирается в J18.
Частые ошибки
**Неправильно:** Путать копирование и ссылку
**Почему:** const b = a; — не создаёт копию. b и a указывают на тот же объект.
**Правильно:** Для копии используйте spread: const b = { ...a }
**Неправильно:** Использовать dot notation с переменной
**Почему:** user.key — ищет свойство с именем 'key', а не значение переменной key.
**Правильно:** Для переменной используйте bracket notation: user[key]
**Неправильно:** Забывать, что [] — массив, {} — объект
**Почему:** [1,2,3] — массив (это объект). { a: 1 } — объект. typeof [] === 'object'.
**Правильно:** Используйте Array.isArray() для проверки на массив.
Важно запомнить
- Объект — коллекция ключ/значение
- Dot notation: obj.key, Bracket: obj['key']
- Bracket нужен для переменных и спецсимволов
- Методы — функции внутри объекта
- Объекты передаются по ссылке, не по значению
Связь
Назад: Вы знаете функции (J10) — теперь вы умеете прикреплять их к объектам как методы.
Вперёд: Следующий урок (J12) — optional chaining: безопасный способ доступа к вложенным свойствам.