자바스크립트의 자료형은 총 7가지이다.
7가지는 크게 기본 자료형(Primitive)과 객체(Object)로 나눌 수 있다.
Boolean은 논리적인 요소를 나타내며, true
, false
의 2가지 값을 가진다.
1===2 // false
typeof(1===2) // 'boolean'
Null은 식별되지 않는 것을 표현하며, null
이라는 1가지의 값을 가진다.
var sample = null
sample===null //true
typeof(sample) // 'object'
이상하게도
sample===null
의 값은 참인데 typeof시 데이터 타입은object
로 반환되는 것을 볼 수 있다.
이는, 초기 자바스크립트의 버그로 수정하면 파장이 클까봐 이렇게 계속 쓰이고 있다고 한다.
undefined는 선언한 후 값을 할당하지 않는 변수, 값이 주어지지 않는 인수에 자동으로 할당되며, udnefined
를 가질 수 있다.
var sample;
typeof(sample) // 'undefined'
숫자의 자료형은 단 하나만 존재한다.(float, double 등등 없음)
우선, 단 하나만 존재하는 이유에 대해 설명하자면, 숫자 타입이 64비트의 부동 소수점을 이용해 표시하기 때문에, 모든 수 체계를 지원하기 때문이다.
이렇게만 들으면 장점밖에 없어 보이지만, 단점도 존재한다.
간단한 덧셈 연산을 해보도록 하겠다.
0.3+0.4 // 0.7
0.1+0.2 // 0.30000000000000004
진짜 기초적인 연산인데 어째서 0.30000...4가 나오는 것일까?
컴퓨터는 실수를 연속적으로 표현할 수 없기 때문에, 4/3이 1.33333...으로 무한대로 가는 경우 중간에 끊어줄 필요가 있어진다.
이런 특정 시점으로 끊기는 수와 수 사이의 간격을머신 입실론(Machine Epsilon)
이라고 하고, 위의 덧셈에서의 오류를 해결하기 위해서는 머신 입실론을 통해 equal 처리를 해주거나, 수학 관련 라이브러리를 사용해야 한다.
String 타입은 텍스트 데이터를 나타내는데 사용한다.
String(문자열)은 변경 불가능하기 때문에, 수정할 수 없다.
var name = 'jamong';
typeof(name); // 'string'
Symbol은 유일하고 변경 불가능한 값이다.
var sym = Symbol('sun');
typeof(sym); // 'symbol'
Object(객체)는 식별자로 참조할 수 있는, 메모리에 있는 값이다.
객체는 키와 값으 매핑이기 떄문에, hashmap을 표현하기에 적합한 자료형이기도 하다.
// 생성자 함수
function Book(name){
this.name = name;
}
const book1 = new Book('JavaScript');
typeof(book1); // 'object'
참고 자료: