자바스크립트는 7개의 데이터 타입을 제공한다.
구분 | 데이터 타입 | 설명 |
---|---|---|
원시 타입 | 숫자 number | 숫자. 정수와 실수 구분이 없다. |
문자열 string | 문자열 | |
불리언 boolean | true, false | |
undefined | var 키워드로 선언된 변수에 암묵적으로 할당된다. | |
null | 값이 없다는 것을 의도적으로 명시할 때 사용된다. | |
심볼 symbol | ES6에서 새로 추가된 타입 | |
객체 | 객체, 함수, 배열 등 |
정수와 실수의 구분이 없고, 모든 수를 실수로 처리한다.
아래와 같은 특별한 값도 표현이 가능하다.
ES6부터 템플릿 리터럴(template literal)이 도입되었다.
true
와 false
만 존재한다.
undefined
만 존재한다.
null
만 존재한다. 의도적으로 값이 없다는 것을 명시하기 위해 사용한다.
또한 변수에 null
을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다.
함수가 유효한 값을 반환할 수 없는 경우에 명시적으로 null
을 반환하기도 한다.
ES6에서 추가된 타입으로, 변경이 불가능한 원시 타입이다.
다른 값과 중복되지 않는 유일무이한 값이다.
다른 원시 타입들과 다르게 심볼은 Symbol 함수를 호출해 생성한다.
33장. Symbol 공부 이후 내용 추가 예정
ECMAScript 사양은 문자열과 숫자 타입 외의 데이터 타입의 크기를 명시적으로 규정하지 않는다. 따라서, 문자열과 숫자 타입을 제외하고 데이터 타입에 따라 확보되는 메모리 공간의 크기는 자바스크립트 엔진의 구현에 따라 다를 수 있다.
자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다.
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
이를 동적 타이핑 dynamic typing
이라고 한다.
변수 값이 언제든지 변경될 수 있기 때문에 복잡한 프로그램에서는 변화하는 변수의 값을 추적하기 어려울 수 있다.
더욱이 자바스크립트는 개발자의 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.
즉, 유연성은 높지만, 신뢰성은 떨어진다.이를 부족한 신뢰성을 올리기 위해
TypeScript
를 쓴다.
컴퓨터가 이해하는 코드는 어떤 바보라도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다.
Martin Fowler, 《리팩토링》 저자