Константа const
в JavaScript позволяет создавать переменные, значения которых не могут быть изменены после инициализации. Однако, некоторые люди могут быть смущены тем, что при использовании const
вместо let
или var
, значения переменных могут быть изменены. В данном случае, важно понимать разницу между изменением значения самой константы и изменением свойств или элементов объектов или массивов, назначенных этой константе.
Когда вы объявляете переменную с использованием ключевого слова const
, вы не можете присвоить ей новое значение. Например:
const x = 10; x = 20; // TypeError: Assignment to constant variable.
В этом примере, вы получите ошибку "TypeError: Assignment to constant variable". Это происходит потому, что const
создает переменную с постоянным значением, которое не может быть изменено.
Однако, если вы объявляете const
переменную и назначаете ей объект или массив, вы все еще можете изменять свойства или элементы этого объекта или массива. Например:
const person = { name: 'John', age: 25 }; person.age = 30; console.log(person); // { name: 'John', age: 30 }
В этом примере, мы можем изменить значение свойства age
объекта person
, но мы не можем назначить person
новым объектом.
Почему так происходит? В JavaScript, переменные, содержащие объекты или массивы, являются ссылками на объекты в памяти. Когда мы назначаем const
переменной объект или массив, мы фиксируем ссылку на объект или массив, а не на само значение. Поэтому, мы можем изменять свойства или элементы объекта или массива, назначенного const
переменной, потому что мы работаем с самим объектом или массивом через его ссылку.
Следует отметить, что если мы попытаемся переназначить ссылку на новый объект или массив, будучи объявленными как const
, мы получим ошибку, например:
const fruits = ['apple', 'banana']; fruits = ['orange', 'kiwi']; // TypeError: Assignment to constant variable.
В этом случае, мы получим ошибку "TypeError: Assignment to constant variable", потому что мы пытаемся переназначить const
переменную fruits
на новый массив.
Итак, когда мы говорим, что const
позволяет изменять значение внутри себя не по ссылке, мы подразумеваем, что мы можем изменять свойства или элементы объекта или массива, назначенного этой const
переменной, но мы не можем переназначить ссылку на новый объект или массив.