// 모두 숫자 타입이다.
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
자바스크립트는 C나 자바와 다르게 하나의 숫자 타입만 존재한다. 모든 수를 실수로 처리한다.
// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰따옴표
string = `문자열`; // 백틱 (ES6)
string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다.';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";
var template = `<ul>
<li><a href="#">Home</a></li>
</ul>`;
console.log(template);
/*
<ul>
<li><a href="#">Home</a></li>
</ul>
*/
일반적인 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀸스를 사용하지 않고도 줄바꿈이 허용된다
var first = 'Ung-mo';
var last = 'Lee';
// ES5: 문자열 연결
console.log('My name is ' + first + ' ' + last + '.'); // My name is Ung-mo Lee.
var first = 'Ung-mo';
var last = 'Lee';
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.
표현식의 평가 결과가 문자열이 아니더라도 문자열로 강제로 변환되어 삽입된다.
var foo = true;
console.log(foo); // true
foo = false;
console.log(foo); // false
var foo;
console.log(foo); // undefined
undifined는 개발자가 의도적으로 할당하기 위한 값이 아니라 엔진이 변수를 초기화 할 떄 사용되는 값이다. undifined값이 환된다면 초기화되지 않은 변수라는 것을 알 수 있다.
var foo = 'Lee';
// 이전에 할당되어 있던 값에 대한 참조를 제거. foo 변수는 더 이상 'Lee'를 참조하지 않는다.
// 유용해 보이지는 않는다. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.
foo = null;
의도적으로 값이 없다는 것을 명시하기 위해 사용한다.
var foo;
console.log(typeof foo); // undefined
foo = 3;
console.log(typeof foo); // number
foo = 'Hello';
console.log(typeof foo); // string
foo = true;
console.log(typeof foo); // boolean
foo = null;
console.log(typeof foo); // object
foo = Symbol(); // 심벌
console.log(typeof foo); // symbol
foo = {}; // 객체
console.log(typeof foo); // object
foo = []; // 배열
console.log(typeof foo); // object
foo = function () {}; // 함수
console.log(typeof foo); // function
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 탕비은 언제든지 동적으로 변할 수 있다.
C나 자바 같은 정적타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야한다. 이를 명시적타입선언이라 한다.
자바스크립트는 개발자의 의도와는 상광없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동적으로 변환되기도 한다. 이는 유연성은 높지만 신뢰성은 떨어진다는 단점이 있다.