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, | ||
| } |
typeoftypeof 연산자를 사용하면 변수의 타입을 알아낼 수 있다.
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