Какие статические методы предоставляет глобальный объект `Object` в JavaScript?

Ответ

Глобальный объект 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, ёперный театр. И методы у него — то ли для помощи, то ли для того, чтобы жизнь медом не казалась.