자바스크립트 데이터 타입(javascript data type)
자바스크립트에는 8가지 데이터 타입이 있고, 그중 7가지는 원시 데이터 타입이라고 한다.
- Number
- BigInt
- String
- Boolean
- null
- undefined
- Symbol
- Object
이중 Object를 제외한 나머지 7개가 원시 데이터 타입이다.
원시 데이터 타입(Primitive value)
변경할 수 없는 불변의 데이터 타입으로, 다른 데이터들을 구성하는 가장 기본적인 단위
- 한 번 생성되면 변경할 수 없다.
- 값을 직접 수정할 수 없다.
- 복사될 때 값 자체가 복사된다.(참조가 아닌 값 자체를 저장)
- 객체가 아니기 때문에 매서드를 가지지 않는다.
*단, 일부 원시 값은 임시로 객체로 변환되어, 매서드를 사용 가능한 경우도 있다.
지금은 그냥 8개의 데이터 타입이 있고, 객체를 제외한 나머지는 원시 데이터 타입이구나~
정도로만 이해하고 넘어가면 될 것 같다.
또, 자바스크립트의 특징중 하나로, 데이터 타입은 있지만
자바스크립트의 변수들은 데이터 타입에 크게 제약받지 않는다.
예를 들어 문자형인 어떤 변수를 숫자형으로도 바꿀 수 있다는 얘기다.
이렇게 데이터 타입은 있지만 변수에 저장되는 값의 데이터 타입을
언제든지 바꿀 수 있는 언어를 동적 타입(dynamically typed) 언어라고 부른다.
각각의 데이터 타입에 대한 자세한 내용은 각각의 포스팅에서 다루기로 하고,
이번 포스팅에서는 간략하게만 짚고 넘어가 보자.
Number
숫자형은 정수 및 부동소수점 숫자, 그리고 Infinity
, -Infinity
그리고NaN
같은 특수 숫자 값이 포함되어 있다.
Infinity
: 어떤 수 보다 큰 수-Infinity
: 어떤 수 보다 작은 수NaN
: 연산중 에러가 날 경우 발생
신입 교육 중 NaN, undefined, null을 비슷하다고 생각하는 신입들이 꽤 있었는데,
NaN은 숫자형이다.
typeof(NaN);
//'number'
(2^53-1)
(9007199254740991
) 보다 큰 값 혹은 -(2^53-1)
보다 작은 정수는 나타낼 수 없음
BigInt
정수를 길이 상관없이 표현 가능 정수형 리터럴 뒤에 n을 붙여서 사용할 수 있다.
const bigInt = 1234567890123456789012345678901234567890n;
* 숫자형의 범위가 초과되는 숫자가 BigInt가 되는 것이 아니라 정수형 리터럴 뒤에 n
이 붙으면 BigInt가 된다.
typeof(3n);
//'bigint'
음.. 진짜 거~의 쓸 일은 없다.
String
따옴표로 묶여있는 문자. "123" 도 문자형에 속한다.
큰따옴표("), 작은따옴표('), 역따옴표-백틱(`) 3가지 따옴표를 사용할 수 있다.
큰따옴표와 작은따옴표는 기능상 차이가 없고,
백틱의 경우 ${...}의
형태로 변수나 표현식을 넣어 줄 수 있다.
const name = 'bear';
console.log(`hi ${name}?`)
//hi bear?
console.log(`1 + 2 = ${1 + 2}`);
//1 + 2 = 3
console.log(`3은 1보다 ${3 < 1 ? "작다" : "크다"}`)
// 3은 1보다 크다
백틱이 없었을 때(?)라고 하기엔 뭐 하지만 예전엔 이런 식으로 했었다.
const name = 'bear';
console.log('hi ' + name + '?');
//hi bear?
Boolean
참/거짓 (true, false) 두 가지 값만 존재하는 데이터 타입이다.
null
존재하지 않거나, 비어 있거나, 알 수 없는 값이다.
undefined
정의되지 않음, 변수는 선언되었지만 값이 할당되지 않았을 때 지정된다.
let a;
a
// undefined
Symbol
객체의 고유한 식별자(unique identifier)를 만들 때 사용된다. 객체 포스팅에서 자세히 다룰 예정.
Object
원시 데이터 타입이 아닌 데이터 타입으로 다양한 객체들이 있다.
데이터 컬렉션이나 복잡한 개체(entity)를 표현할 수 있다.
주로 사용하는 배열, 일반 객체 맵, 셋 등등이 있다.
데이터 타입을 확인하는 방법
typeof operand
typeof(operand)
위 방식을 사용하여 내가 원하는 표현식 또는 객체의 데이터 타입을 출력할 수 있다.
console.log(typeof 42);
// Expected output: "number"
console.log(typeof 'blubber');
// Expected output: "string"
console.log(typeof true);
// Expected output: "boolean"
console.log(typeof undeclaredVariable);
// Expected output: "undefined"