JavaScript는 느슨한 타입(loosely typed)의 동적(dynamic) 언어이다.
// 동적 타입
let foo = 42 // foo가 숫자
foo = 'bar' // foo가 이제 문자열
foo = true // foo가 이제 불리언
숫자, 문자열, 불리언, null, undefined인 다섯가지 기본 타입은 더 이상 단순화할 수 없기 때문에 원시적(primitive)이라 하며, 이러한 값을 가리켜 원시 값이라 한다.
데이터 타입 | 설명 | 값 |
---|---|---|
Boolean | 논리적 값 | true or false |
Null | 비어 있는 값 | null |
Undefined | 값을 할당하지 않은 변수 | undefined |
Number | 정수, 실수 등의 숫자와 세 개의 상징적인 값 | +0 (0 ), -0 |
~ , | ||
-Infinity , | ||
+Infinity , | ||
NaN(Not a Number) | ||
BigInt | Number의 안전 한계를 넘는 큰 정수 | 2n , 53n , ... |
String | 텍스트 데이터를 나타냄, 불변함 | "Hi", "123", ... |
Symbol | 고유하고 변경 불가능한 원시 값, 객체의 속성 키로 사용 | "foo", "a", "b", ... |
식별자로 참조할 수 있는 메모리 상의 값이다.
{}
)로 묶인 0개 이상인 객체의 속성명과 관련 값 쌍 목록이다.데이터 타입 | 설명 | 값 |
---|---|---|
object | 두 개 이상의 복잡한 개체를 저장 | { |
name: 'Smith', | ||
age: 32, | ||
} |
typeof
typeof 연산자를 사용하면 변수의 타입을 알아낼 수 있다.
null
은 null
이 아니라 object
라고 나오는데, 명백한 오류이지만 수많은 프로그램들이 object
로 취급하며 만들어졌기 때문에 이전 버전에서 오류나는 것을 방지하기 위해 의도적으로 버그를 수정하지 않는다고 한다.// 원시 값
console.log(typeof true); // boolean
console.log(typeof null); // object
console.log(typeof undefined); // undefined
console.log(typeof 123); // number
console.log(typeof 123n); // bigint
console.log(typeof "hi"); // string
console.log(typeof Symbol("id")); // symbol
// 객체
console.log(typeof Math); // object
// 함수
console.log(typeof console.log); // function