Методы Object
Методы Object
JavaScript предоставляет богатый набор статических методов для работы с объектами.
Object.keys / values / entries
const user = { name: 'Иван', age: 25, role: 'admin' };
Object.keys(user) // ['name', 'age', 'role']
Object.values(user) // ['Иван', 25, 'admin']
Object.entries(user) // [['name', 'Иван'], ['age', 25], ['role', 'admin']]
Применение:
// Итерация по объекту
for (const [key, value] of Object.entries(user)) {
console.log(`${key}: ${value}`);
}
// Трансформация значений
const doubled = Object.fromEntries(
Object.entries({ a: 1, b: 2, c: 3 }).map(([k, v]) => [k, v * 2])
); // { a: 2, b: 4, c: 6 }
Object.assign — копирование свойств
const defaults = { theme: 'light', lang: 'en' };
const userPrefs = { lang: 'ru' };
// Объединить объекты (мутирует первый аргумент!)
const merged = Object.assign({}, defaults, userPrefs);
// { theme: 'light', lang: 'ru' }
// Современная альтернатива — spread (не мутирует)
const merged2 = { ...defaults, ...userPrefs };
Object.assign мутирует первый аргумент. Всегда передавайте {} как первый аргумент если хотите новый объект.Object.fromEntries — из массива пар
// Из Map
const map = new Map([['a', 1], ['b', 2]]);
Object.fromEntries(map); // { a: 1, b: 2 }
// Трансформация объекта
const prices = { apple: 50, banana: 30, cherry: 100 };
const discounted = Object.fromEntries(
Object.entries(prices).map(([key, val]) => [key, val * 0.9])
); // { apple: 45, banana: 27, cherry: 90 }
Object.freeze / Object.seal
// freeze — полностью замораживает объект
const config = Object.freeze({ host: 'localhost', port: 3000 });
config.port = 8080; // Не выбросит ошибку, но и не изменится (в strict — TypeError)
config.newProp = 'x'; // Игнорируется
console.log(config.port); // 3000
// seal — запрещает добавление/удаление свойств, но позволяет менять существующие
const obj = Object.seal({ a: 1, b: 2 });
obj.a = 99; // OK
obj.c = 3; // Игнорируется
delete obj.a; // Игнорируется
Object.keys только для собственных свойств
const parent = { inherited: 'yes' };
const child = Object.create(parent);
child.own = 'yes';
Object.keys(child) // ['own'] — только собственные
for (const key in child) // 'own', 'inherited' — включая унаследованные
ECMAScript гарантирует порядок ключей в Object.keys/values/entries:
- Сначала целочисленные ключи (как индексы массива) в числовом порядке
- Затем строковые ключи в порядке добавления
- Затем Symbol-ключи в порядке добавления
Но не полагайтесь на порядок ключей для логики — используйте массивы если порядок важен.