Можно ли переменной const в JS присваивать значение Повторно?
Ребята, я Абсолютный Новичок, в JS, поэтому Будьте Снисходительны!! И НЕ бейте по рукам!! В обучающем видео смотрел, что при Повторном присвоении значения переменной const - должна выскакивать Ошибка..... Но у меня в Хром-консоли НИкакой ошибки Нет, а Переприсвается значение....
Что я не так понимаю? - подскажите.
Ответы (3 шт):
Так и есть, вот пример кода - при переназначении переменной выводиться ошибка. Вы можете так же попробовать вбить этот код прям в консоли браузера - будет ошибка.
const i = 10;
i = 5;
Надо понимать, что const работает в том случае, если меняется значение самой переменной, но если в переменной находится объект и менять непосредственно свойство объекта, то это не будет считаться за изменение переменной, т.к. сам тип остался объектом, который указывает всё на ту же область памяти.
Так что возможно у вас была такая проблема именно с объектом, а не с каким-нибудь примитивом
Например ошибки не будет в таком случае:
const myArray = [0, true, 'hi', null, 999]; //создадим 'константу'
console.log(`Первоначальный массив: ${myArray}`); //проверим содержимое
myArray[2] = 15; //изменим значение 'hi' на 15
console.log(`Изменённый массив: ${myArray}`); //проверим содержимое снова
Но код не выполнится в таком:
const myArray = [0, true, 'hi', null, 999]; //создадим 'константу'
console.log(`Первоначальный массив: ${myArray}`); //проверим содержимое
myArray = [0, true, 15, null, 999]; //попробуем изменить значение 'hi' на 15
console.log(`Изменённый массив: ${myArray}`); //проверим содержимое снова
Все потому что в языке существуют разные типы данных:
- Примитивы - передают значение(числа, строки, булевы значения и т.д.)
- Объекты - передают ссылку на значение(объекты, массивы, функции и т.д.)
Когда объявляешь в качестве константы объектный тип данных, в константу записывается ссылка на значения, а не сами значения. Поэтому их возможно изменять. Однако во 2 примере мы не меняли значения массива, а пытались присвоить константе новый массив с новой ссылкой. Из-за этой попытки изменить ссылку на массив и случилась ошибка.
Больше про типы данных можно узнать здесь: mdn web docs