Я подписался на курс по основам JS, организованный Флавио Копесом. Каждый день Флавио рассылает участникам электронные письма с парой вопросов/задач. Всего должно быть 35 писем. Отвечать на них не обязательно, но ответы на вопросы являются важной частью курса. Поэтому я решил поделиться своими ответами с миром: в лучшем случае это может помочь кому угодно, кроме меня, в худшем — только мне.

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

Если у объекта нет сеттеров, мы можем использовать метод assign:

Чтобы скопировать сеттеры объекта, есть еще один способ поверхностного копирования: комбинация методов defineProperties и getOwnPropertyDescriptors:

Напишите код, необходимый для сравнения двух объектов

Давайте сравним объекты song и songCopy:

Возьмите один из вышеперечисленных объектов и напишите код, необходимый для того, чтобы одно из его свойств было доступно только для чтения, а не для редактирования.

Свойство можно сделать неизменяемым с помощью флага writable:

Обратите внимание, что попытка переназначить неизменяемое свойство вызывает ошибку только в строгом режиме.