Изменение массива, объявленного с ключевым словом const
Объявление const
имеет много вариантов использования в современном JavaScript. Некоторые разработчики предпочитают объявлять все свои переменные, используя ключевое слово const
по умолчанию, если только они не знают, что им нужно будет переназначить это значение (только в этом случае они используют let
). Однако важно понимать, что объекты (включая массивы и функции), назначенные переменным с использованием const
, по-прежнему изменяемы. Использование объявления const
только предотвращает переназначение идентификатора переменной.
const s = [5, 6, 7];
try{
s = [1, 2, 3];
}
catch(error) {
console.error(error)
}
s[2] = 45;
console.log(s);
Как вы можете видеть, вы можете самостоятельно мутировать массив [5, 6, 7]
, а переменная s
все равно укажет на измененный массив [5, 6, 45]
. Как и все массивы, элементы массива в s
изменяемы, но поскольку используется const
, вы не можете задать переменной s
новое значение с использованием оператора присваивания.
Уточнение. Чтобы было понятней в чем здесь разница, следует подробней разобрать какие именно операции выполнялись и почему где-то возникала ошибка, а где-то нет.
s = [1, 2, 3];
Вот здесь выполняется попытка уже существующей переменной s
задать новое значение. Такая операция в случае с константой вызовет ошибку.
s[2] = 45;
А вот здесь мы не переменной s
задаем новое значение, а отдельному элементу массива, который является значением этой переменной. Чтобы это лучше понять, следует помнить, что переменные, которым в качестве значения задаются объекты или массивы, на самом деле являются ссылками на эти объекты. При этом на один и тот же объект могут ссылаться сразу несколько переменных. Вот пример:
const s = [5, 6, 7];
const s2 = s;
s[2] = 45;
console.log(s); // [5, 6, 45]
console.log(s2); // [5, 6, 45]
console.log(s === s2); // true
Таким образом, мы изменили элемент массива только одной переменной, но измененный массив мы получили и во второй переменной, а строгая проверка этих двух переменных на равенство дала истину. Надеюсь, вы из этого поняли, что переменных две, но массив здесь только один, и меняя значения отдельных элементов массива, мы все равно имеем тот же самый массив, на который ссылаются две отдельные переменные.
Массив объявляется как const s = [5, 7, 2]
. Измените массив на [2, 5, 7]
используя различные назначения элементов.