
간단히 정의하자면 객체가 아닌 다른 모든 타입을 의미한다.
객체가 아니므로 이러한 타입들은 메서드를 갖지 않는다.
총 7가지의 원시타입이 있다.
- undefined
- null
- Boolean
- Number
- Bigint
- String
- Symbol
✔️ falsy가 가능한 값의 실제 타입
: false, 0, -0, 0n, 0x0n, NaN, "", '', ``, null, undefined
✔️ truthy : 조건문 내부에서 true로 취급되는 값
: 앞에서 언급한 falsy로 취급되는 값 이외에는 모두 true, {}, []
📌 백틱을 사용해서 표현한 문자열 : 템플릿 리터럴(template literal)
: 줄바꿈이 가능하고, 문자열 내부에 표현식을 쓸 수 있음
// Symbol 함수에 같은 인수를 넘겨주더라도 이는 동일한 값으로 인정되지 않음
const key = Symbol('key')
const key2 = Symbol('key')
key === key2 // false
원시 타입과 객체 타입의 가장 큰 차이점이라고 한다면, 바로 값을 저장하는 방식의 차이다. 동등 비교를 할 때 차이를 만드는 원인이 된다.
원시 타입은 불변 형태의 값으로 저장된다. 그리고 이 값은 변수 할당 시점에서 메모리 영역을 차지하고 저장된다.
let hello = 'hello world'
let hi = hello
console.log(hello === hi) // true
➡️ hello의 'hello world'라는 값이 hi에 복사해서 전달되었기 때문에 true
객체는 프로퍼티를 삭제, 추가, 수정할 수 있으므로 원시 값과 다르게 변경 가능한 형태로 저장되며, 값을 복사할 때도 값이 아닌 참조를 전달한다.
var hello = {
greet: 'hello, world',
}
var hi = {
greet: 'hello, world',
}
console.log(hello === hi) // false
➡️ 객체는 값을 저장하는 게 아니라 참조를 저장하기 때문에 동일하게 선언했던 객체라 하더라도 저장하는 순간 다른 참조를 바라보게 된다. 즉 값은 같았을지언정 참조하는 곳이 다른 셈이다.