자바스크립트(ES6)는 7개의 데이터 타입을 제공한다.
[숫자(number), 문자열(string), 불리언(boolean), undefined, null, 심벌(symbol), 객체]
객체를 제외한 나머지 6개는 원시 타입이라 부르기도 한다.
각 타입은 확보해야 할 메모리 공간의 크기도 다르고 메모리에 저장되는 값도 다르며
해석하는 방식도 다르기 때문에 명확한 의도를 가지고 타입을 구별해 값을 생성해야 한다.
숫자(number)
파이썬을 포함해 많은 프로그래밍 언어에서는 보통 숫자 안에서도 타입을 나누는 경우(int, float..)가 많은데,
자바스크립트는 통합된 number 타입만 있다.
ES(이제 ECMAScript를 ES라 줄여서 칭하겠다)에서 number는 64비트(8바이트) 부동소수점 형식을 따른다.
이 말은 모든 수를 실수로 처리하고, 정수만을 위한 타입이 따로 존재하지 않는다는 뜻이다.
따라서 정수로 표시되는 수끼리 나눠도 실수가 나올 수 있기 때문에, 편리하면서도 주의해야 한다.
숫자 말고도 Infinity, -Infinity, NaN(산술 연산 불가) 값을 표현할 수 있다.
파이썬에서 10/0을 계산하면 zero division error가 뜨지만,
자바스크립트에서 10/0을 계산하면 Infinity가 나온다.
그리고 1*'a'처럼 다른 타입의 연산을 시도하면 NaN이 나온다.
문자열(string)
문자열은 작은따옴표(''), 큰따옴표(""), 백틱(``)으로 텍스트를 감싸 표현한다.
자바스크립트에서 가장 일반적인 표현법은 작은따옴표로 감싸는 것이다.
하지만 ES6에 도입된 템플릿 리터럴을 사용해 백틱(``)으로 문자를 표현하면
이스케이프 시퀀스(백슬래시로 시작하는 명령어)를 사용하지 않고 줄바꿈(개행)을 할 수 있다.
또한 표현식 삽입(`1 + 2 = ${1 + 2};`)도 템플릿 리터럴을 통해 표현할 수 있다.
불리언(boolean)
true와 false로 이루어져 있다. 파이썬은 첫 글자가 대문자였지만, 자바스크립트에서는 소문자이다.
undefined
메모리 공간 할당 전 빈 상태를 undefined라고 한다. 대부분 개발자가 의도적으로 할당하기 위한 값이 아니라
자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다. 변수에 값이 없음을 선언하고 싶을 때에는
null을 사용하는 것이 좋다.
null
변수의 값이 없다는 것을 의도적으로 명시하는 기능을 한다.
심벌(symbol)
ES6에 도입된 타입이다. 다른 값과 중복되지 않기 때문에 이름이 충돌할 위험이 없는 객체의
유일한 프로퍼티 키를 만들기 위해 사용한다.
심벌은 Symbol 함수를 호출해 생성하며, 값이 외부에 노출되지 않고 중복되지 않는다.
단, Symbol.for를 사용하면 전역에 존재하는 global symbol table을 참조하기 때문에
이미 정의된 심벌이 있다면 해당 값을 반환한다.
var key = Symbol('key');
console.log(typeof key); // symbol
var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value
var key2 = Symbol('key');
console.log(key === key2); // false
var key3 = Symbol.for('key');
var key4 = Symbol.for('key');
console.log(key3 === key4); // true
객체
자바스크립트는 객체 기반의 언어로, 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
지금까지 살펴본 6가지 데이터 타입 외의 값은 모두 객체 타입이라 보면 된다.
동적 타이핑
C나 자바같이 변수에 값을 할당할 때 데이터 타입을 사전에 선언하는 것을 정적 타입 언어라 한다.
이와 반대로 파이썬이나 자바스크립트처럼 타입 선언 없이 변수를 선언하는 언어를 동적 타입 언어라 한다.
그래서 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정되고, 또 재할당에 의해
언제든지 변수의 타입이 동적으로 변할 수 있다.
따라서 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어지는 편이다.
다음 포스트에선 연산자에 대해 알아보자
'Programming > JavaScript' 카테고리의 다른 글
자바스크립트의 연산자 (0) | 2020.12.14 |
---|---|
자바스크립트와 변수 (0) | 2020.12.11 |
자바스크립트(JavaScript)에 대해 가볍게 알아보자 (1) | 2020.12.11 |
댓글