자바스크립트가 제공하는 데이터 타입은 원시 타입과 객체 타입으로 구분할 수 있다. 두 타입은 크게 세가지 측면에서 다르다.
1.변경 불가능한 값
원시 타입의 값, 즉 원시 값은 변경 불가능한 값이다. 다시 말해, 한번 생성된 원시 값은 읽기 전용 값으로서 변경할 수 없다.
<aside> 💡 값은 변수에 저장된 데이터로서 표현식이 평가되어 생성된 결과이다. 이때 변경 불가능하다는 것은 변수가 아니라 값에 대한 진술이다. 변수는 언제든 재할당을 통해 값을 변경 할 수있음.
</aside>

변수 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경한다. 값의 이러한 특성을 **불변성(immutability)**이라 한다.
2.문자열과 불변성
자바스크립트는 개발자의 편의를 위해 원시 타입인 문자열 타입을 제공한다.
자바스크립트의 문자열은 원시 타입이며, 변경 불가능하다.
var str = 'Hello';
str = 'World';
생성된 문자열 'Hello'를 수정하는 것이 아니라 새로운 문자열 'World'를 메모리에 생성하고 식별자 str은 이것을 가리킨다.
var str = 'String'
// 인덱스를 사용해 각 문자에 접근할 수 있다.
console.log(str[0]); // S
// 원시 값인 문자열이 객체처럼 동작한다.
console.log(str.length); // 6
console.log(str.toUpperCase()); //STRIN
문자열은 유사 배열 객체이면서 이터러블이므로 배열과 유사하게 각 문자에 접근할 수 있다.