
🥸 자바스크립트의 데이터 타입은 크게 두가지로
기본형(원시형, 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)을 참고하세요!