1. 숫자 타입
배정밀도 64비트 부동소수점 형식의 2진수로 저장
모든 수를 실수로 처리
정수만 표현하기 위한 데이터 타입은 존재하지 않는다
var binary = 0b10000001; //2진수
console.log(binary); //65
console.log(1 === 1.0); //true - 숫자타입은 모두 실수로 처리
console.log(10/0); //Infinity
console.log(10/-0); //-Infinity
console.log(1*'String'); //NaN
2. 문자열 타입
0개 이상의 16비트 유니코드 문자의 집합
작은따옴표'', 큰따옴표"", 백틱``으로 텍스트를 감싼다.
템플릿 리터럴
1) 멀티라인 문자열
일반 문자열 내에선 줄바꿈 허용 불가
줄바꿈 등의 공백을 표현하려면 백슬래시 \
로 시작하는 이스케이프 시퀀스를 사용
(ex. \n, \t...)
//일반 문자열에 이스케이프 시퀀스를 사용한 경우
var template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';
//템플릿 리터럴을 사용한 경우
var template=`<ul>
<li><a href="#">Home</a></li>
</ul>`
두 경우의 출력결과는 아래와 동일하다.
<ul>
<li><a href="#">Home</a></li>
</ul>
2) 표현식 삽입
문자열은 문자열 연산자 +
를 사용해 연결할 수 있다.
var first = 'Mi-jin';
var last = 'Kim';
console.log('My name is ' + first + ' ' + last + '.'); //My name is Mi-jin Kim;
템플릿 리터럴 내에선 표현식을 ${}
으로 감싸서 표현한다.
console.log(`My name is ${first} ${last}.`); //My name is Mi-jin Kim;
표현식 삽입은 반드시 템플릿 리터럴 내에서 사용! 템플릿 리터럴이 아닌 일반 문자열에서의 표현식 삽입은 문자열로 취급된다.
console.log('1 + 2 = ${1 + 2}'); //1 + 2 = ${1 + 2}
3. 불리언 타입
논리적 참, 거짓을 나타내는 true
, false
가 있다.
var foo = true;
console.log(foo); //true
4. undefined 타입
undefined
값이 유일하다.
undefined는 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다.
5. null 타입
null
이 유일하다.
null은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이므로 자바스크립트 엔진은 참조되지 않는 메모리 공간에 대해 가비지 콜렉션을 수행한다.
var foo = 'Lee';
foo = null; //이전 참조를 제거, foo는 더 이상 'Lee'를 참조하지 않으므로 가비지컬렉터가 정리.
함수가 유효한값을 반환할 수 없는 경우에도 명시적으로 null을 반환하기도 한다.
6. 심벌 타입
다른 값과 중복되지 않는 유일무이한 값이다.
Symbol함수
를 호출해 생성한다.
var key = Symbol('key');
console.log(typeof key);
//객체 생성
var obj = {};
//이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티키로 사용
obj[key] = 'value';
console.log(obj[key]); //value
자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
원시타입 이외의 값은 모두 객체 타입이다.
var score = 100;
100
을 숫자타입
의 값으로 해석한다.8바이트
의 메모리 공간을 확보한 후 100을 2진수
로 저장한다.score
변수에는 숫자타입의 값이 할당되어 있으므로 엔진은 score 변수를 숫자 타입
으로 인식한다. 숫자타입은 8바이트 단위로 저장되므로 score 변수를 참조하면 8바이트 단위
로 메모리 공간에 저장된 값을 읽어들인다.score
변수에 할당된 값은 숫자타입
의 값이므로 score변수를 참조하면 메모리 공간의 주소에서 읽어들인 2진수를 숫자로 해석
한다.정적타입언어는 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 사전에 선언해야 한다.(=명시적 타입 선언)
char c; //1바이트 정수타입의 값만 할당가능
int num; //4바이트 정수타입의 값만 할당가능
변수에 선언한 타입에 맞는 값만 할당할 수 있다!
타입체크를 수행 -> 통과못하면 에러 발생, 프로그램 실행 중단 -> 안정적인 코드구현 -> 런타임에 발생하는 에러 감소
ex. C, C++, Java, ...
동적타입언어는 변수를 선언이 아닌 할당을 통해 타입이 결정된다.
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
ex. Javascript, Python, PHP, ...