자바스크립트는 크게 원시 타입 (primitive type)과 객체 타입 (object/reference type)으로 구분된다.
[ 원시 타입 ]
변경 불가능한 값 (immutable value) 이다.
변수에 실제 값이 저장된다.
복사 시 원시 값이 복사 된다.
값에 의한 전달 (call by value)
[ 객체 타입 ]
변경 가능한 값 (mutable value) 이다.
변수에는 참조 값이 저장 된다.
복사 시 참조 값이 복사 된다.
참조에 의한 전달 (call by reference)
변경 불가능하다는 것은 변수가 아니라 값에 대한 진술이다.
재할당을 통해 변수 값을 변경할 수 있으나, 실제 메모리 공간에 저장된 값을 변경할 수 없어 원시 값이라고 한다.
단, 상수는 변수임에도 단 한번만 할당이 허용되므로 재할당 할 수 없다.
원시값은 변경이 불가능 하기 때문에 위와 같이 사용되지 않는 값이라 할 지라도 메모리 공간에 남아있다.
후에 사용되지 않는 공간의 경우 가비지 컬렉션에 의해 제거된다.
이러한 특징으로 인해 불변성을 지닌다.
불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없다.
문자열과 불변성
1개의 문자는 2바이트 (16비트)의 메모리 공간에 저장된다. 즉, 문자열은 몇 개의 문자로 구성됐는지에 따라 메모리 공간의 크기가 달라진다.
숫자 값은 크기에 관계없이 8바이트(64비트)가 필요하다.
즉, 같은 1000000000 이라는 표현이라도 문자로 표현하게 되면 20바이트, 숫자로 표현하게 되면 8바이트가 필요하다.