Const создает ссылку на значение только для чтения, т. е. значения, присвоенные константной переменной, нельзя переназначить.

Но подождите... здесь есть подвох!

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

Давайте разберемся в этом на простом примере, мы создадим переменную типа const для каждого типа данных и посмотрим, сможем ли мы изменить ее значение.

Теперь давайте посмотрим, что происходит, когда мы пытаемся изменить значение для каждой из переменных примитивного типа данных.

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

Давайте попробуем то же самое для объектов:

Если мы напрямую переназначим константный объект какому-то другому объекту, то, очевидно, он не позволит нам этого сделать, и мы получим такое же присвоение константной ошибке.

Вывод в консоль:

Но что происходит, когда мы вносим некоторые изменения в свойства объекта и элемента массива? Давайте попробуем, мы изменили значение имени и возраста для объекта personDetails и консоль объекта, мы можем изменить значение объекта, даже если объект имеет тип const.

Вывод в консоль:

Что здесь произошло?

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

Использование Object.freeze для запрета изменений в объекте и массиве

Если мы хотим, чтобы значения нашего объекта и массива не менялись, мы должны заморозить объект, используя Object.freeze(your-object).

Итак, в нашем коде, если мы использовали Object.freeze(personDetails) и попытались изменить значения нашего объекта, мы не сможем этого сделать.

Теперь, когда мы видим вывод нашего оператора консоли, мы видим, что значения объекта не изменились, имя по-прежнему Мухаммад, а возраст по-прежнему 17, даже после того, как мы попытались изменить эти значения объекта.

Консольный вывод:

Замораживание массива во избежание изменений:

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

Вывод в консоль:

Если вы нашли эту статью полезной, похлопайте👏 и поделитесь ею с друзьями.

Узнавайте что-то новое каждый день