데이터 타입

기본형과 참조형을 구분할 수 있는 방법은, 할당이나 연산 시 값을 복사하면 기본형이고, 값을 복사할 때 참조하면 참조형이다. 그러면 할당한다.

불변 값이란?(원시형 Primitive**)**

var a = 10;
a = 20;
console.log(a); // 20

흔히 사람의 입장에서는 10이 저장되어 있는 메모리 공간에 10을 삭제하고 20을 집어 넣는 것을 생각한다. 하지만 자바스크립트는 값을 새로 생성하고 주소를 수정해주었다. 즉, 기본형 타입은 새로 생성 되었고 변경되지 않았다. (10이라는 값은 추후 GC가 수집하여 없어질 것임)

참조형 Reference

var obj = {
		 a : 10,
		 b : 'abc',
}
obj.a = 20;
console.log(obj); 
// [object Object] {
//  a: 20,
//  b: "abc"
// }

obj의 프로퍼티의 값을 재할당하면, obj이 가지고 있는 메모리 주소는 변경되지 않고 obj.a가 가지고 있는 주소가 변경된다. 즉, ‘새로운 객체’가 만들어진 것이 아니라 기존 객체 내부의 값만 바뀐 것이다.

깊은 복사란?

깊은 복사란, 기존 값의 모든 참조가 끊어지는 것을 말한다. 특히 복사할 때, 참조형 타입 값(객체)에서 내부에 있는 모든 값이 새로운 값이 되는 것을 말한다.

기본형 타입의 깊은 복사

자바스크립트에서는 할당 연산자(=)를 사용해 쉽게 복사를 할 수 있다.

var a = 10;
var b = a;
console.log(a); // 10
console.log(b); // 10

참조형 타입의 얕은 복사