데이터 타입(줄여서 ‘타입’)은 값의 종류를 말하며, 자바스크립트의 모든 값은 데이터 타입을 갖는다.
메모리 공간의 크기
를 결정하기 위해메모리 공간의 크기
를 결정하기 위해2진수를 어떻게 해석
할지 결정하기 위해데이터 타입에 의한 메모리 공간 확보
값은 메모리에 저장하고 참조할 수 있어야 한다. 몇 바이트의 메모리 공간을 사용해야 낭비와 손실 없이 값을 저장할 수 있는지 알아야 한다. 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정된다.
데이터 타입에 의한 메모리 참조
변수의 값을 참조하려면 한 번에 읽어 들어야 할 메모리 공간의 크기, 즉 메모리 셀의 개수(바이트 수)를 알아야 한다.
자바스크립트(ES6)는 7개의 데이터 타입을 제공하며, 원시 타입(primitive type)
과 객체 타입(object type)
으로 분류된다.
구분 | 데이터 타입 | 설명 |
---|---|---|
원시 타입 | 숫자 타입(number type) | 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재 |
문자열 타입(string type) | 문자열 | |
불리언 타입(boolean type) | 논리적 참(true)과 거짓(false) | |
undefined 타입 | 변수 명령어로 선언된 변수에 암묵적으로 할당되는 값 | |
null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
심벌 타입(symbol type) | ES6에서 추가된 7번째 타입 | |
객체 타입 | 객체, 함수, 배열 등 |
자바스크립트의 경우 다른 언어와 다르게 하나의 숫자 타입만 존재한다.
// 모두 숫자 타입
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
// 숫자타입의 추가적인 세가지 특별한 값
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(1 * "문자열 타입"); // NaN
2진수, 8진수, 16진수를 표현하기 위한 데이터 타입도 제공하지 않기 때문에 모두 10진수로 해석된다.
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
// 표기법만 다를 뿐 모두 같은 값
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65
console.log(binary === octal); // true (참)
console.log(octal === hex); // true (참)
문자를 작은 따옴표 또는 큰 따옴표, 백틱으로 감싼다.
var string;
string = "문자열"; // 작은 따옴표
string = "문자열"; // 큰 따옴표
string = `문자열`; // 백틱(ES6)
// 위와 같이 감싸지 않을 경우 식별자로 인식
string = 문자열; // 레퍼런스 오류
불리언 타입의 값은 논리적 참(true)
, 거짓(false)
뿐이다.
var foo = true;
console.log(foo); // true
foo = false;
console.log(foo); // false
불리언 타입의 경우 참, 거짓으로 구분되는 조건으로 조건문에 자주 사용된다.
undefined 값 하나만 존재하며, 선언된 변수의 값이 할당되어 있지 않으면 undefined를 반환한다.
undefined 타입과 동일하게 null 타입도 null 값 하나만 존재한다. (대소문자 주의)
null의 경우 undefined와 다르게 변수에 값을 지정하였으나 그 값이 비어있음을 의도적으로 명시한 것이다. 변수에 null을 할당하는 것은 이전 값을 제거하는 것이며, 자바스크립트 엔진은 참조하지 않는 이전 값을 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.
var foo = "jay";
// foo에 null을 할당하면서 이전 값인 jay를 참조하지 않는다.
foo = null;