🥸 자바스크립트의 데이터 타입은 크게 두가지로
기본형(원시형, primitive type)
과참조형(reference type)
이 있습니다. 나뉘는 기준은 복제를 할 때,기본형
은 값이 담긴 주솟값을 바로 복제하는 반면참조형
은 값이 담긴 주솟값들로 이루어진 묶음을 가리키는 주솟값을 복제한다는 점이 다릅니다.
모든 숫자를 64비트 부동 소수점 형태로 저장하기 때문에 정수나 실수의 구분 없이 변수에 바로 값을 대입할 수 있습니다. 모든 숫자를 실수로 처리하기 때문에 나누기 연산을 할 경우 소수점까지 출력되므로 주의하여야 합니다.
const num = 3/2;
console.log(number); // 1.5
// 숫자 타입의 세 가지 특별한 값
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(1 * "H"); // NaN
🔥 자바스크립트는 대소문자를 구별하기 때문에
NaN
을 NAN, Nan, nan 등으로 표현할 경우 에러가 발생합니다. 해당 NAN, Nan, nan은 자바스크립트 엔진에서 식별자로 해석됩니다.
16비트 부호 없는 정수 값 "요소"로 구성된 집합으로, 각각의 요소가 String의 한 자리를 차지합니다. String의 길이는 그 안의 요소 수와 같습니다. JavaScript 문자열은 불변하기 때문에, 문자열을 생성한 후 바꾸는 것은 불가능합니다. 그러나 원본 문자열을 사용해 새로운 문자열을 생성하는 것은 가능합니다.
let str = "hi";
str[0] = "H";
console.log(str); // "hi"
str = "HI";
console.log(str); // "HI"
논리 요소를 나타내며 true
와 false
두 가지의 값을 가질 수 있습니다.
const a = 1 > 2;
const b = 1 < 2;
console.log(a); // false
console.log(b); // true
일반적으로 존재하지 않거나 유효하지 않은 object 또는 주소를 의도적으로 가리키는 참조를 나타냅니다. 자바스크립트에서 null은 동작이 원시적으로 보이기 때문에 primitive values 중 하나로 표시됩니다. 하지만 typeof 연산자를 사용할 때는 object를 반환합니다. Null 타입은 null 하나의 값만 가질 수 있습니다.
console.log(typeof null); // "object"
선언한 후 값을 할당하지 않은 변수 혹은 값이 주어지지 않은 인수에 자동으로 할당됩니다. 자바스크립트에서의 undefined는 타입이면서 값을 나타냅니다.
let a;
console.log(typeof a); // "undefined"
console.log(a) // undefined
임의 정밀도로 정수를 나타낼 수 있는 원시 값으로, Number의 안전 한계를 넘어서는 큰 정수도 안전하게 저장하고 연산할 수 있습니다. BigInt는 정수 끝에 n을 추가하거나 생성자를 호출해 생성할 수 있습니다. Number와 혼합해 연산할 수 없으며, 이때 TypeError가 발생합니다.
const a = 2n ** 53n;
const b = a + 1n;
console.log(a); // 9007199254740992n
console.log(b); // 9007199254740993n
ECMA Script 6(ES6)에서 등장한 새로운 데이터 타입으로, 고유하고 변경 불가능한 원시 값이며 객체의 속성 키로 사용할 수 있습니다. 충돌 위험이 없는 고유한 프로퍼티를 만들기 위한 데이터 타입입니다. 어떤 프로그래밍 언어들에선 "아톰"이라고 부르기도 합니다.
const tmp = Symbol('tmp');
console.log(typeof tmp); // "symbol"
console.log(tmp === Symbol('tmp')); // false (단순 디버깅을 위한 설명을 인자값으로 받는다.)
자바스크립트에서 기본형을 제외한 모든 값은 객체로 취급되기 때문에 배열이나 함수 등도 모두 객체로 표현됩니다. 주로 key:value
형태의 데이터를 저장하며, 하나의 값만 저장되는 기본 데이터 타입과는 다르게 여러 개의 프로퍼티를 저장할 수 있습니다. 이런 객체의 프로퍼티는 기본 데이터 타입의 값을 가지거나 다른 객체를 가리킬 수 있습니다. 이러한 성질로 함수도 객체의 프로퍼티로 지정할 수 있고, 자바스크립트에서는 이런 프로퍼티를 메서드라고 부릅니다.
🧐 각 타입의 특징을 자세히 알고 싶다면 이곳(MDN)을 참고하세요!