3. Популярные методы работы с объектами


1. Object.keys()

Возвращает массив ключей объекта

const user = {
  id: 1,
  username: "john_doe",
  email: "john@example.com",
  role: "admin"
};

const keys = Object.keys(user);
console.log(keys); // ["id", "username", "email", "role"]

2. Object.values()

Возвращает массив значений объекта

const values = Object.values(user);
console.log(values); // [1, "john_doe", "john@example.com", "admin"]

3. Object.entries()

Возвращает массив пар [ключ, значение]

const entries = Object.entries(user);
console.log(entries);
// [["id", 1], ["username", "john_doe"], ["email", "john@example.com"], ["role", "admin"]]

4. Object.assign()

Копирует свойства из одного или нескольких объектов в целевой объект

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const result = Object.assign(target, source);
console.log(result); // { a: 1, b: 4, c: 5 }

// Более безопасный вариант (без мутации исходного объекта)
const newObj = Object.assign({}, target, source);

5. Object.freeze()

Замораживает объект, предотвращая добавление, удаление и изменение свойств

const config = {
  apiUrl: "https://api.example.com",
  timeout: 5000
};

Object.freeze(config);
config.timeout = 10000; // Не сработает в strict mode
config.newProperty = "value"; // Не сработает

6. Object.seal()

Запечатывает объект, разрешая изменение существующих свойств, но запрещая добавление и удаление

const settings = { theme: "dark", notifications: true };
Object.seal(settings);

settings.theme = "light"; // Работает
settings.language = "ru"; // Не добавляется
delete settings.notifications; // Не удаляется

7. Spread оператор (...)

Современный способ копирования и объединения объектов

// Копирование объекта
const original = { x: 1, y: 2 };
const copy = { ...original };

// Объединение объектов
const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const merged = { ...obj1, ...obj2 }; // { a: 1, b: 3, c: 4 }

// Добавление новых свойств при копировании
const updated = { ...original, z: 3, y: 20 }; // { x: 1, y: 20, z: 3 }