Ответ
Глобальный объект Object в JavaScript содержит статические методы для работы со свойствами объектов и управления их мутабельностью.
Методы для итерации и преобразования:
Object.keys(obj)→ Возвращает массив строк-ключей собственных перечисляемых свойств объекта.Object.values(obj)→ Возвращает массив значений собственных перечисляемых свойств.Object.entries(obj)→ Возвращает массив пар[ключ, значение]собственных перечисляемых свойств.
const user = { name: 'Alice', age: 30, role: 'admin' };
console.log(Object.keys(user)); // ['name', 'age', 'role']
console.log(Object.values(user)); // ['Alice', 30, 'admin']
console.log(Object.entries(user));// [['name', 'Alice'], ['age', 30], ['role', 'admin']]
Методы для создания и копирования объектов:
Object.assign(target, ...sources)→ Копирует значения всех собственных перечисляемых свойств из одного или нескольких исходных объектов в целевой объект. Возвращает измененный целевой объект.const target = { a: 1 }; const source = { b: 2, c: 3 }; const result = Object.assign(target, source); console.log(result); // { a: 1, b: 2, c: 3 } console.log(target === result); // true (мутирует target)
Методы для контроля мутабельности (защиты объекта):
Object.freeze(obj)→ Замораживает объект: запрещает добавление, удаление и изменение существующих свойств. Нельзя изменить дескрипторы свойств.Object.seal(obj)→ Запечатывает объект: запрещает добавление и удаление свойств, но позволяет изменять значения существующих свойств.Object.preventExtensions(obj)→ Запрещает добавление новых свойств, но позволяет удалять и изменять существующие.
Проверочные методы: Object.isFrozen(), Object.isSealed(), Object.isExtensible().
Ответ 18+ 🔞
Да ты посмотри, какой он, этот Object, хитрожопый! Сидит себе в глобальной области, как паук в центре паутины, и дергает за ниточки всех остальных объектов. А внутри — целый арсенал статических методов, чтобы этими объектами вертеть как хочет. Прямо как наш Герасим, только не немой, а наоборот, орет на всех: «Муму! То есть, Object!».
Ну, методы для того, чтобы похавать объект и выплюнуть массивы:
Object.keys(obj)— Этот, блядь, выковыривает из объекта все ключи его собственных, перечисляемых свойств и сует их в массив. Как будто у тебя куртка с кучей карманов, а он вытряхивает на стол только ярлычки от них.Object.values(obj)— А этот уже похуже: ему ключи не нужны, он значения из тех же карманов выгребает. Деньги, жвачки, проездной — всё в кучу.Object.entries(obj)— Ну а это, мать его, максималист! Хочет всё и сразу. Выдает тебе массив, где каждый элемент — это парочка[ключ, значение]. Полный расклад, блядь.
const user = { name: 'Алиса', age: 30, role: 'админ' };
console.log(Object.keys(user)); // ['name', 'age', 'role'] — ярлычки
console.log(Object.values(user)); // ['Алиса', 30, 'админ'] — содержимое
console.log(Object.entries(user));// [['name', 'Алиса'], ['age', 30], ['role', 'админ']] — полный пиздец, прости Господи
А вот методы для клонирования и склеивания — тут уже начинается магия, а иногда и пиздец:
Object.assign(target, ...sources)— Это, сука, такой швейцарский нож для объектов. Берет целевой объект и начинает в него пихать все свойства из исходных. Возвращает он, конечно, этот же целевой объект, но уже изнасилованный. Главное помнить — он мутирует цель! Это не копия, это прямо в оригинал лезет.const target = { a: 1 }; const source = { b: 2, c: 3 }; const result = Object.assign(target, source); console.log(result); // { a: 1, b: 2, c: 3 } — вроде норм console.log(target === result); // true — а вот и пиздец! `target` теперь не тот, что был. Его ебланили.
И наконец, мои любимые — методы-надзиратели. Чтобы объект не распизделся:
Object.freeze(obj)— Заморозка, ёпта! Всё, приехали. После этого ни добавить свойство, ни удалить, ни изменить значение. Даже дескрипторы свойств менять нельзя. Объект — ледышка. Как Герасим после утопления Муму — окаменел, блядь.Object.seal(obj)— Запечатывает. Новые свойства не добавить, старые не удалить, но вот значения существующих — пожалуйста, меняй на здоровье. Как будто дом закрыли на амбарный замок, но внутри жильцы могут ремонт делать.Object.preventExtensions(obj)— Самый мягкий, но тоже гад. Новые свойства добавлять нельзя, а вот удалять старые или менять их значения — можно. Как будто сказали: «Расширяться больше не будем, живём в том, что есть».
А чтобы проверить, не обманывают ли тебя, есть проверочные методы: Object.isFrozen(), Object.isSealed(), Object.isExtensible(). Подходи и тыкай, заморожен объект или ещё шевелится.
Вот такой он, Object, ёперный театр. И методы у него — то ли для помощи, то ли для того, чтобы жизнь медом не казалась.