원시 값은 더 이상 나눌 수 없는, 기본적인 데이터 단위이다.
값 자체가 변수에 저장되며, immutable (불변)하다. 즉, 한 번 만들어진 원시 값은 변경될 수 없다.
자바스크립트에는 총 7가지 원시 타입이 있다:
타입 | 설명 | 예시 |
---|---|---|
string | 문자열 | 'hello' , "world" |
number | 숫자 (정수, 실수 포함) | 42 , 3.14 |
bigint | 아주 큰 정수 (ES2020 도입) | 123456789012345678901234567890n |
boolean | 참/거짓 | true , false |
undefined | 정의되지 않은 값 | let x; (초기화 안 된 변수) |
null | 명시적인 "없음" 또는 "비어 있음" | let y = null; |
symbol | 고유한 식별자 생성용 (ES6 도입) | Symbol('id') |
let str = 'hello';
str[0] = 'H'; // 시도는 가능하지만 실제 값은 변하지 않음
console.log(str); // 'hello'
문자열을 바꾸는 것처럼 보여도, 실제로는 새로운 문자열이 생성된다.
원시 값은 값 자체가 복사되기 때문에, 다른 변수에 할당해도 원본은 영향받지 않는다.
let a = 10;
let b = a;
b = 20;
console.log(a); // 10
a
와 b
는 서로 완전히 독립적인 값이다.
typeof
연산자를 사용하여 원시 타입을 확인할 수 있다:
typeof 'hello'; // 'string'
typeof 42; // 'number'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof null; // 'object' ← 이건 JS 언어 설계상의 오래된 실수
typeof Symbol(); // 'symbol'
typeof 123n; // 'bigint'
구분 | 원시 값 | 객체 (참조 타입) |
---|---|---|
저장 방식 | 값 자체 | 메모리 참조 (주소) |
복사 방식 | 값 복사 | 참조 복사 (얕은 복사) |
변경 가능성 | 불변 | 변경 가능 (mutable) |
let name = "John";
console.log(name.toUpperCase()); // "JOHN"
String
객체로 일시적으로 래핑(wrapping)한다.특징 | 설명 |
---|---|
불변 | 수정 불가. 새 값으로 대체만 가능 |
값 복사 | 변수 간 할당 시 값 자체가 복사됨 |
7가지 타입 | string, number, bigint, boolean, undefined, null, symbol |
메모리 사용 효율성 | 객체보다 가볍고 빠름 |