자바스크립트 객체는 const로 선언해도 왜 값 변경이 가능할까?

이종호·2022년 5월 24일
0

JavaScript

목록 보기
7/11
post-thumbnail

코드스테이츠 줌 라이브 세션 중 누군가가 객체는 const로 선언해도 왜 값을 바꿀수 있는가? 라고 질문했다.

나름대로 생각을 정리해봤다.
먼저 자료형,

  1. 원시자료형은 선언한 식별자와 주소를 저장한다.
  2. 객체는 위와 동일하지만 식별자와 함께 저장된 주소가 또 다시 객체의 주소로 저장된다.

이를 통해서 const는 단지 첫 선언된 주소값을 바인딩 하는것이 아닐까? 라는 점이다.

원시자료형은

let a = 123; // 식별자 a의 값 주소 @1001
a = 'abc'; // 식별자 a의 값 주소 @1002

이런식으로 값자체를 바꾸는게 아닌 값을 검색해서 없을경우 새로운 주소를 만들어 값을 할당하고, 만약

let a = 123; // 식별자 a의 값 주소 @1001
let b = 123; // 식별자 b의 값 주소 @1001

다른 변수가 동일 한 값을 선언하면 그 주소를 가져온다.

객체는

const obj = {
  // 식별자 obj에 객체 주소 @5001을 할당 후 @5001의 주소는 @7001,@7002
	a: 1, 	// @7001 값에 a식별자를 갖고 주소는 @1001
  	b: 'bbb' // @7002 값에 b식별자를 갖고 주소는 @1002
}

이런식이다.
그러므로 객체의 프로퍼티를 접근해서 값을 변경하는 것은
첫 번째 obj가 선언된 메모리의 주소값에 영향이 가지 않는다.

obj 자체의 주소를 건드려보면?

const obj1 = {
	a: 1,
  	b: 'bbb'
}
const obj2 = {
	a: 2,
  	b: 'ccc'
}
obj1 = obj2; // const 선언 에러

이는 obj1의 주소를 직접적으로 obj2로 바꾸는것으로 const를 재할당 했을때 나오는 에러가 나온다.

그러므로, const는 식별자와 함께 저장된 주소를 변경하지 않는다.

가 내 추론이다.

profile
Frontend

0개의 댓글