원시(primitive) type
숫자 타입
문자열 타입
boolean 타입
null
undefined
Symbol
객체(object) type
객체, 함수, 배열 등
모든 수를 실수로 처리한다.
Infinity - 양의 무한대
-Infinity - 음의 무한대
NaN(not a number) - 산술 연산 불가
템플릿 리터럴 (``)
var template = `<ul>
<li><a href="#">Home</a></li>
</ul>`;
console.log(template);
var first = 'dongwoo';
var second = 'ko';
console.log(`My name is ${first} ${second}`); // 표현식 삽입 ${}
var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화
변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태(대부분 비어있지 않고 쓰레기값이 들어있다.)로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화
개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값
→ 개발자가 의도적으로 undefined를 변수에 할당하는 것은 본래의 취지와 어긋나고 혼란을 줄 수 있으므로 권장하지 않는다.
변수에 값이 없다는 것을 명시하고 싶을 때 null 할당
변경 불가능한 원시 타입의 값
다른 값과 중복되지 않는 유일무이한 값
주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
var key = Symbol('key')
console.log(typeof key); // symbol
값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론)된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
이러한 특징을 동적 타이핑(dynamic typing)이라 하며 자바스크립트와 같은 언어를 동적 타입 언어라한다.
ex) 자바스크립트, 파이썬, php 등등
↔ 정적 타입 언어 : 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 사전에 선언해야 한다!
ex) C, C++, Java 등등