자바스크립트의 모든 값은 데이터 타입을 갖습니다.
총 8개의 타입을 제공하는데, 원시 타입(primitive type)과 객체 타입(object/reference type) 으로 분류할 수 있습니다.
원시 타입은 숫자(number) 타입, 문자열(string) 타입, 불리언(boolean) 타입, undefined 타입, null 타입, 심벌(symbol) 타입, BigInt 타입으로 7개의 타입을 갖습니다.
객체 타입은 객체, 함수, 배열 등을 객체 타입으로써 갖게됩니다.
원시 타입과 객체 타입은 크게 세 가지 측면에서 다릅니다.
변경 불가능한 값 입니다.변경이 가능한 값입니다.실제 값이 저장됩니다.참조 값이 저장됩니다.원시 값이 복사되어 전달됩니다. 이를 값에 의한 전달 이라 합니다.참조 값이 복사되어 전달됩니다. 이를 참조에 의한 전달 이라 합니다.원시 타입의 값은 변경이 불가능한 값 으로써 한번 생성된 원시 값은 읽기 전용(read only) 값으로서 변경할 수 없습니다.
값을 변경할 수 없다는 것은 변수가 아니라 값에 대한 진술입니다.
'원시 값은 변경이 불가능하다' 라는 말은 원시 값 자체를 변경할 수 없다는 것이지 변수의 값을 변경할 수 없다는 것이 아닙니다.
변수의 경우에는 언제든지 재할당을 통해 변수 값을 변경(교체)할 수 있습니다.
변수의 상대개념인 상수는 재할당이 금지된 변수를 말합니다. 상수도 값을 저장하기 위한 메모리 공간이 필요하므로 변수라고 할 수 있지만, 언제든지 재할당을 통해 변수 값을 언제나 변경할 수 있는 변수와는 달리 상수는 단 한번만 할당이 허용되므로 변수의 값을 변경할 수 없습니다.
상수와 변경이 불가능한 값을 동일시하면 안됩니다.
상수는 재할당이 금지된 변수입니다.

불변성(immutanility) 이라 합니다.불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없습니다.
원시 값인 문자열은 다른 원시 값들과 비교했을 때 독특한 특징이 있습니다. 문자열은 0개 이상의 문자로 이루어진 집합을 말하며, 1개으 ㅣ문자는 2바이트의 메모리 공간에 저장 됩니다.
따라서 문자열은 몇 개의 문자로 이루어졌느냐에 따라 메모리 공간의 그키가 결정되며, 숫자 값은 1이든 10000000 이든 동일한 8바이트가 필요하지만 문자열의 경우 1개의 문자로 이루어진 문자열은 2바이트, 10개의 문자로 이루어진 문자열은 20바이트가 필요합니다.
let str1 = ''; // 0개의 문자로 이루어진 문자열 (빈 문자열)
let str2 = 'hello'; // 5개의 문자로 이루어진 문자열
유사 배열 객체 이면서 이터러블 이므로 배열과 유사하게 각 문자에 접근할 수 있습니다.유사 배열 객체란?
- 마치 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있고, length 프로퍼티를 갖는 객체를 말합니다. 문자열은 마치 배열처럼 인덱스를 통해 각 문자에 접근할 수 있으며, length 프로퍼티를 갖기 때문에 유사 배열 객체이고 for문으로 순회할 수도 있습니다.
let str = 'string'; console.log(str[0]); // s console.log(str.length); // 6 console.log(str.toUpperCase()); // STRING
이미 생성된 문자열은 일부 문자를 변경해도 반영되지 않습니다. 이는 문자열이 변경이 불가능한 값이기 때문입니다.
원시 값은 어떤 일이 있어도 불변하며, 예기치 못한 변경으로 부터 자유롭습니다. 이는 데이터의 신뢰성을 보장합니다.
하지만 변수에 새로운 문자열을 재할당하는 것은 가능합니다. 이는 기존 문자열을 변경하는 것이 아닌 새로운 문자열을 새롭게 할당하는 것이기 때문입니다.
변수에 원시 값을 갖는 변수를 할당하면 변수 할당 시점이든, 두 변수 중 어느 하나의 변수에 값을 재할당하는 시점이든 결국은 두 변수의 원시 값은 서로 다른 메모리 공간에 저장된 별개의 값이 되어 어느 한쪽에서 재할당을 통해 값을 변경하더라도 서로 간섭할 수 없습니다.
-정리-
원시 타입이란?
Number, String, BigInt, undefined, null, symbol, boolan 총 7가지의 데이터 타입이 존재하며, 값이 절대 변하지 않는 불변성을 가지고 있기 때문에 원시 타입의 데이터들은 데이터 복사가 일어날 때 메모리 공간(스택 메모리)을 새로 확보하여 독립적인 값을 저장합니다.