const는 JS에서 변하지 않는 상수를 선언할 때 사용된다. 그런데 배열과 객체는 요소를 추가, 수정, 삭제할 수 있어야 하는데 const로 선언하면 저러한 것들을 할 수 없는게 아닌가? 하는 의문이 들기 마련이다.
하지만 const 키워드를 사용해서 배열과 객체를 만들고 그 값을 수정하더라도 잘 수정된다.
그 이유는 Const 변수에 할당된 값은 바뀌지 않지만, 배열/객체가 변수에 할당될 때에는 배열/객체의 요소(값) 자체가 아니라 주소(이 값은 불변, 상수)가 할당되기 때문이다.
숫자, 문자열 등의 원시 자료형은 stack 영역에 저장되지만, 배열 객체같은 참조 자료형은 heap 영역에 저장되고, stack에는 heap에 저장된 데이터의 주소만 저장된다.
그래서 실제 heap 내에 저장되어 있는 배열, 객체 내의 요소를 변경하더라도 참조된 주소는 변하지 않으므로 const로 사용 가능하다.