Объекты в JavaScript являются важным типом данных и представляют собой наборы пар ключ: значение. Значения могут быть представлены различными типами данных JavaScript. Чаще всего это строки, числа и логические данные true/fase.

Все объекты JavaScript основаны на родительском конструкторе в виде класса Object. Этот класс имеет множество полезных встроенных методов, позволяющих получать доступ к отдельным объектам и работать с ними напрямую. В отличие от методов массивов, которые работают с для экземплярами, т.е. с переменными класса Array,  методы объекта используются при обращении к Object, а в качестве параметра в методе указывается экземпляр объекта, например, Object.create(student), Object.keys(student). Такие методы называются статическими.

Давайте рассмотрим часть этих методов.

Метод Object.create()

Метод Object.create() предназначен для создания новых объектов и их привязки к прототипу существующего объекта. В случае создания пустого объекта используется выражение let obj = Object.create(null).

Однако намного удобнее создавать объект на основе уже существующего, меняя какие-либо его свойства или методы. Например, существует объект для описания некой вакансии. С помощью метода Object.create() можно создать экземпляр объекта vacancy и расширить его для описания разных объектов-вакансий.

Код примера.

Вывод результата работы кода:

Для объекта mechanic мы задали только одно свойство type, но все остальные свойства и метод объекта vacancy доступны через прототип. Во втором объекте мы уже изменили 2 свойства, и для обоих объектов вывели потом информацию методом showInfo().

Метод Object.create() может быть полезен в случаях, когда нужно создать несколько однотипных объектов, причем он позволяет сократить код за счет минимального дублирования.

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

Свойства объекта можно перебрать и вывести с помощью  цикла for ... in, однако намного удобнее работать с методами массивов, которые помогут быстрее манипулировать данными в объекте.

Метод Object.keys()

Метод Object.keys() создает массив, содержащий ключи объекта. Если нам необходимы именно ключи (наименование свойств объекта), то мы можем поместить их в массив ключей с помощью этого метода.

В том случае, когда нам надо вывести и ключи, и значения, мы можем использовать цикл for..of или метод массива forEach(), которые недоступны для объектов.

Результат:

Метод Object.values()

Метод Object.values() создает массив, содержащий значения объекта. Например, с его помощью мы можем быстро подсчитать сумму, в которую нам обойдется список продуктов:

В переменную vals у нас попадают только цифры в виде массива. Затем с помощью метода массивов reduce мы их можем быстро сложить.

Так сработает этот код:

Метод Object.entries()

Метод Object.entries() создает вложенный массив пар ключ-значение для объекта.

Для предыдущего кода мы можем вызвать метод Object.entries() и получим массив, внутри которого будет несколько элементов в виде двумерного массива

Здесь мы используем обращение entry[0] для ключей объекта и entry[1] для значений в цикле for ... of.

Также мы можем использовать метод массивов forEach() для перебора элементов в полученном после использования метода Object.entries() массиве, задавая  параметры с помощью оператора деструктивного присваивания.

Результат:

Еще один пример касается вывода информации из массива объектов.

Давайте посмотрим на работу кода:

See the Pen Object.keys() by Elen (@ambassador) on CodePen.

Примечание: Метод Object.entries() возвращает только собственные свойства экземпляра объекта, а не свойства, унаследованные от прототипа. Однако в большинстве случаев этого достаточно.

Метод Object.assign()

Метод Object.assign() используется для копирования значений одного объекта в другой объект.

С помощью метода Object.assign() мы можем объединить два объекта. Например, так:

В результате получим один объект:

То же самое можно получить, используя spread-оператор:

В консоли увидим такие данные:

Метод Object.freeze()

Метод Object.freeze() предназначен для "замораживания" объекта, что предотвращает изменение свойств и значений объекта, а также добавление или удаление свойств объекта. То есть объект, созданный с помощью Object.freeze() недоступен для изменений.

Например, таким образом можно защитить данные объекта-администратора от перезаписи.

Как видно в консоли, к объекту не добавлено новое свойство, а пароль остался прежним.

Метод Object.isFrozen() позволяет определить, "заморожен" ли объект, и возвращает логическое значение в виде true/false.

Метод Object.seal()

Метод Object.seal() предотвращает добавление новых свойств к объекту, но допускает изменение существующих свойств. Этот метод похож на метод Object.freeze() с "половинной" функциональностью. В приведенном ниже коде мы опять пытаемся изменить пароль и добавить новое свойство. Однако мы можем только изменить уже существующее свойство.

Как видно из консоли, пароль изменился, а новое свойство online не было добавлено.

Автор: Alex

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *