Const

support·2022년 5월 11일
0

Today I Learned

목록 보기
4/11
post-thumbnail

var 재선언 O 재할당 O
let 재선언 X 재할당 O
const 재선언 X 재할당 X

const는 재선언과 재할당이 전부 불가능한데
const로 배열이나 객체를 만들었을 때 값 변경이 가능하다
이유는? 값을 변경했을 뿐이지 변수를 재할당한 것이 아니기 때문에 가능하다

const people = {name: 'lee'}
people.name = 'park'
// park

const 키워드는 변수를 상수로 선언할 수 있다,
일반적으로 상수로 선언된 변수는 값을 바꾸지 못한다

하지만 ES6에서의 const는 할당된 값이 상수가 되는 것이 아닌 변수가(바인딩된 값) 상수가 된다
즉 people 변수가 상수가 되기 때문에 const 키워드로 선언된 people 변수에
객체 재할당은 불가능하지만 객체의 속성은 변경 가능하다

객체의 속성 변경이 가능한 이유는 객체가 변경되는 것은 맞지만
const로 선언한 변수와 객체 사이의 바인딩은 변경되지 않기 때문이다

완전 변경 불가능한 객체를 만들고 싶을 때 Object.freeze() JS내장메소드 사용

Object.freeze(people)

한줄정리
const는 할당된 값이 상수가 되는 것이 아닌 변수가 상수가 되기 때문에
변수에 객체 재할당은 불가능하지만 속성은 변경이 가능합니다

++
1주차에 정리해뒀던 자료형

참조 자료형은 배열, 객체, 함수가 있다
const로 people을 선언 할당한 뒤 밑처럼 값을 바꾸려 하면
데이터가 저장된 메모리 상의 주소를 변경하려 하기 때문에 오류가 발생한다

const people = {name: 'lee'}
people = {name: 'park'}

하지만 다음처럼 값을 변경하게 되면 주소가 아닌 heap이라는 공간에 들어가 있는 값을 변경하기 때문에 에러가 발생하지 않는다

const people = {name: 'lee'}
people.name = 'park'

0개의 댓글