데이터 타입은 프로그래밍 언어에서 사용할 수 있는 데이터(Number, String etc)의 종류이다.
코드에서 사용되는 모든 데이터는 메모리에 저장하고 참조할 수 있어야 한다. 데이터 타입은 데이터를 메모리에 저장할 때 확보해야 하는 메모리 공간의 크기와 할당할 수 있는 유효한 값에 대한 정보, 그리보 메모리에 저장되어 있는 2진수 데이터를 어떻게 해석할 지에 대한 정보를 제공한다.
데이터 타입은 한정된 메모리 공간을 효율적으로 사용하기 위해서, 그리고 2진수 데이터로 메모리에 저장된 데이터를 다양한 형태로 사용하기 위해 존재한다.
Primitive 와 Reference 두 가지 변수 유형이 있다.원시형의 값은 변경 불가능한 값(immutable value)이며 값에 의해 전달(pass-by-value) 된다.
var a = 1;
var b = a;
console.log(a); // 1
b = 2;
console.log(b); // 2
console.log(a); // 1원본은 변경되지 않으며 사본만 변경된다.
원시 타입을 제외한 나머지 값들(배열, 함수 etc)은 모두 객체이며, 객체는 참조에 의해 전달(passs-by-reference)된다.
참조 타입이란 객체의 모든 연산이 실제값이 아닌 참조값으로 처리됨을 의미한다. 원시 타입은 값이 한번 정해지면 변경할 수 없지만, 객체는 프로퍼티를 변경, 추가, 삭제등이 가능하므로 변경 가능한 값이다.
따라서 객체 타입은 동적으로 변화할 수 있으므로 메모리 공간을 확보해야 하는지 예측할 수 없기 때문에 런타임에 메모리 공간을 확보하고 메모리의 힙 영역에 저장된다.
var obj = {
a: 1,
b: 2,
c: 3
};
var another = obj;
another.c = 5;
console.log(obj); // obj = { a: 1, b: 2, c: 5}참조형이 복사된 이후 사본을 변경하면 원본도 변경된다.