데이터 타입은 값의 종류를 말한다. 자바스크립트의 모든 값은 데이터 타입을 갖는다. ES6기준 7개의 데이터 타입을 갖는다.
문자열과 숫자타입은 같아 보이지만 다르다. 숫자는 연산을 위해 생성하지만, 문자는 텍스트를 화면에 출력하기 위한 용도로 사용되고 메모리에 저장되는 공간크기, 2진수도 다르게 들어간다.
모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 따로 존재하지 않는다. 정수로 표시된다고 해도 사실은 실수를 의미한다. 정수로 표시되는 수끼리 나누더라도 실수로 표시된다.
console.log(1 === 1.0); //true
숫자 타입은 3가지 특별한 값도 표현할 수 있다.
console.log(10 / 0); //Infinity
console.log(10 / -0); //-Infinity
console.log(1 * 'String'); //NaN
문자열타입은 텍스트 데이터를 나타내는데 사용한다. 0개 이상의 16비트 유니코드 문자의 집합이며, 전세계 문자를 표현할 수 있다.
템플릿 리터럴
ES6부터 새로운 문자열 표기법이 도입되었다. 멀티라인 문자열, 표현식 삽입, 테그드 템플릿 등 편리한 문자열 처리 기능을 제공한다. 백틱을 사용해 표현한다.
일반 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.
ex)
let template = `<ul>
<li></li>
</ul>`;
console.log(template);
//<ul>
// <li></li>
//</ul>
멀티라인 문자열
- 일반 문자열 내에서는 줄바꿈이 허용되지 않는다.
- 줄바꿈 등의 공백을 표현하기 위해서는 이스케이프 시퀀스를 사용해야 한다.(\n, \, \t등등)
let template = `Template Literal`; console.log(template); //Template Literal
표현식 삽입
- 문자열 연산자 +를 사용하여 연결할 수 있다.
- 하나 이상의 문자열일 경우 문자열 연결 연산자로 동작한다.
let first = 'mo'; let last = 'li' console.log('My name is' +first+' ' +last+'.');
템플릿 리터럴 내에서는 표현식 삽입을 통해 간단하게 문자열을 삽입할 수 있다. ${}로 표현식을 삽입하는데, 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입된다.
ex)
let first = 'mo';
let last = 'li'
console.log(`My name is {first} {$last}.`);
불리언은 논리적인 참, 거짓을 나타내는 true와 false만 있다.
참과 거짓으로 구분되는 조건에 의해 프로그램 흐름을 제어하는 조건문에서 자주 쓰인다.
undefined 타입의 값은 undefined가 유일하다. 선언된 변수는 암묵적으로 undefined로 초기화 된다. 확보된 메모리 공간을 할당이 이뤄질 때까지 빈 상태(undefined)이다.
null 타입의 값은 null이 유일하다. 대소문자를 구분하기 때문에 Null, NULL 등은 다르다. 프로그래밍에서 null은 변수에 값이 없다는 것을 의도적으로 명시하고 싶을 때 사용한다.
심벌은 ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시 타입 값이다. 심벌 값은 다른 값과 중복되지 않은 유일무이한 값이다.
ex)
let key = Symbol('key');
console.log(typeof key); //symbol
let obj = {};
//이름이 충돌 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용.
obj[key] = 'value';
console.log(obj[key]);
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든 동적으로 변할 수 있다. 이러한 특징들을 동적 타이핑이라 하며, 자바스크립트는 동적 타입 언어이다.
하지만, 이러한 변수의 값으로 타입이 정해지는 동적 타입은 양날의 검이다. 편리하지만 변수의 값은 언제든지 변경될 수 있기 때문에 값을 확인하기 전까지 타입을 확신할 수 없다. 때문에 안정적인 프로그램을 만들기 위해서 변수를 사용할 때 주의사항이 필요하다.