자바스크립트의 모든 값은 데이터 타입을 갖는다.
7개의 데이터 타입은 원시타입과 객체 타입으로 분류된다.
console.log(1 === 1.0); //true
console.log(10/0); //Infinity
console.log(10/-0); //-Infinity
console.log(1 * 'String'); //NaN
ES6부터 도입된 새로운 문자열 표기법
일반 문자열 내에서 줄바꿈이나 들여쓰기를 하려면 \n과 \t를 사용해야했다. 하지만 백틱을 사용하면 줄바꿈과 공백이 그대로 적용된다.
var template = 'Hi \n sangmin';
var template = `Hi
sangmin`;
문자열은 문자열 연산자 +를 사용해서 연결할 수 있는데 템플릿 리터럴 내에서는 ${}으로 간단하게 연결할 수 있다.
var first = 'sangmin';
var last = 'Lee';
console.log('My name is'+first+' '+last+'.');
//My name is sangmin Lee.
var first = 'sangmin';
var last = 'Lee';
console.log(`My name is ${first} ${last}.`);
//My name is sangmin Lee.
논리적 참, 거짓을 나타내는 true, false 뿐이다.
앞장에서 학습했듯이 변수를 선언만 하고 할당을 하지 않고 참조를 하면 undefined가 반환된다.
만약 변수에 값이 없다는 것을 명시하기 위해 개발자가 의도적으로 변수에 undefined를 할당하는 것은 혼란을 주기 때문에 지양해야한다.
변수에 값이 없다는 것을 명시하려면 null을 할당해야한다.
null은 변수에 값이 없다는 것을 의도적으로 명시하기 위해 사용된다. 또한 함수가 유효한 값을 반환할 수 없을 경우 명시적으로 null을 반환하기도 한다.
ex) document.querySeletor 라는 요소를 검색하는 메서드를 사용했는데 부합하는 요소가 없을 경우 null 반환
ES6에서 추가된 7번째 데이터타입으로 변경 불가능한 원시 타입의 값이다.
//심벌값 생성
var koko = Symbol('key');
console.log(typeof koko); // symbol
//객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다
obj[koko] = 'value';
console.log(obj[key]); // value
C나 java의 경우 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 미리 선언해야한다. 또한 변수의 타입은 변경할 수 없으며, 타입에 맞는 값만 할당할 수 있다.
char c;
int num;
하지만 javascript의 경우 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경 가능하다.
정리하면,
동적 타이핑
자바스크립트는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.