자바스크립트의 데이터 타입은 크게 원시 타입과 참조 타입으로 구분됩니다.
원시 타입의 값은 변경 불가능한 값이며,
변수에 값을 할당하거나 복사할 때 값 자체가 복사되어 전달됩니다.
원시 값은 불변(immutable)이며 값 변경은 재할당으로만 이루어진다.
예시
let a = 10
let b = a // 값 자체가 복사됨
console.log(a) //10
console.log(b) //10
b = 20 // b에 새로운 값이 재할당됨
console.log(a) //10
console.log(b) //20
참조타입의 경우 메모리에 객체가 저장된 참조값(위치) 이 저장됩니다.
변수에 값을 할당할 때에도 객체가 저장된 참조값(reference)이 할당되며,
복사할 때에도 참조값이 복사됩니다.
따라서, 여러 변수가 같은 객체를 공유할 수 있으며,객체 내부 속성을 변경하면 원본에도 영향이 발생합니다.(얕은 복사에서 객체 내부의 참조는 변경되지 않아 발생)
예시
let obj1 = { x: 1 }
let obj2 = obj1 // 객체의 참조(주소)가 복사됨
obj2.x = 2 // 같은 객체를 수정
console.log(obj1.x) // 2
console.log(obj2.x) // 2