const란?
const 선언은 블록 범위의 상수를 선언한다. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없다.
즉, const로 선언된 배열이나 객체의 경우, 해당 변수를 다른 값으로 재할당하는 것이 불가능하다. 또 다른 말로는, const로 선언된 변수에 다른 값을 할당하려고 하면 에러가 발생한다는 것이다. 하지만, 배열이나 객체의 요소나 속성에 대한 수정은 가능하다.
배열 객체를 const로 선언해도 요소를 추가할 수 있는 이유
const가 변수 자체를 불변으로 만드는 것이 아니라 변수가 참조하는 값의 변경을 막는 것이기 때문이다.
배열이나 객체는 참조 타입이고, const로 선언된 변수가 참조하는 메모리 공간 자체는 변경되지 않는다.
따라서 변수가 참조하는 배열이나 객체의 요소나 속성은 여전히 변경 가능하다.
const arr = [1,2,3];
arr.push(4);
console.log(arr); // [1,2,3,4]
const obj = { a: 1, b: 2};
obj.c = 3;
obj.a = 4;
console.log(obj); // { a : 4, b : 2, c : 3 }
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
arr1 = arr2; // Error: Assignment to constant variable.
const obj1 = { a : 1, b : 2 };
const obj2 = { c : 3, d : 4 };
obj1 = obj2; // Error: Assignment to constant variable.