자바스크립트의 값은 원시 값(primitive) 또는 객체(object) 입니다.
문자열과 숫자 같은 원시 타입은 불변(immutable) 입니다.
숫자 5는 항상 숫자 5입니다.
문자열 “alpha”도 항상 문자열 “alpha”입니다.
숫자가 불변임은 분명하지만, 문자열에 대해서는 혼동하는 사람들이 있습니다.
예를 들어 “alpha” + “omega” 처럼 문자열을 병합한다면, 같은 문자열을 수정했을 뿐이라고 생각하는 겁니다.
하지만 그렇지 않습니다.
그건 다른 문자열입니다.
5와 6이 서로 다른 숫자인 것과 마찬가지로 alpha와 alphaomega는 서로 다른 문자열입니다.
원시 타입에는 여섯 가지가 있습니다.
- 숫자
- 문자열
- 불리언
- null
- undefined
- 심볼(Symbol)
다만 불변성이라는 말이 변수의 값이 바뀔 수 없다는 뜻은 아닙니다.
let str = "hello";
str = "world";
str은 먼저 불변인 값 “hello”로 초기화됐고, 다시 새로운 불변값 “world”를 할당받았습니다.
중요한 것은 “hello”와 “world”가 서로 다른 문자열이라는 겁니다.
바뀐 것은 str이 저장하는 값뿐입니다.
이런 차이는 대개 이론적인 것이지만, 알고 있으면 6장에서 함수를 설명할 때 도움이 됩니다.
이들 여섯 가지 원시 타입 외에 객체가 있습니다.
원시 값과 달리 객체는 여러 가지 형태와 값을 가질 수 있습니다.
객체의 유연한 성질 때문에 커스텀 데이터 타입을 만들 때 객체를 많이 사용합니다.
자바스크립트에는 다음과 같이 몇 가지 내장된 객체 타입이 있습니다.
- Array
- Date
- RegExp
- Map과 WeakMap
- Set과 WeakSet
마지막으로, 원시 타입 중 숫자와 문자열, 불리언에는 각각 대응하는 객체 타입인 Number, String, Boolean이 있습니다.
이들 대응하는 객체에 실제 값이 저장되지는 않습니다.
이들은 대응하는 원시 값에 기능을 제공하는 역할을 합니다.
이들 객체 타입은 대응하는 원시 값과 함께 설명할 겁니다.