자바스크립트는 총 7개의 데이터 타입을 제공한다. (+ ES11부터 BigInt
라는 새로운 데이터 타입이 추가됨)
구분 | 데이터 타입 | 설명 |
---|---|---|
원시 타입 | number | 정수, 실수, n진수 리터럴이 배정밀도 64비트 부동소수점 형식의 2진수로 저장, 값을 참조 시 10진수로 해석된다. Infinity ,-Infinity , NaN 도 여기에 포함됨 |
string | 문자열 | |
boolean | 논리적 참과 거짓 | |
undefined | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
null | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
symbol | ES6에서 추가된 7번째 타입, 변경 불가능한 값으로 다른 값과 중복되지 않는 유일무이한 값이다. | |
객체 타입 | 객체, 함수, 배열 등 6가지 원시 타입 이외의 값은 모두 객체 타입이다. |
C, C++, Java, Kotlin
과 같은 정적 타입 언어의 경우 사전에 데이터 타입을 선언해야 한다. 변수의 타입 변경이 불가능하며, 타입에 맞는 값만 할당할 수 있다. -> 컴파일 시점에 타입 체크를 수행
JavaScript
는 동적 타입 언어로, 변수는 선언이 아닌 할당 시점에 타입이 결정(type inference
)된다. 또한 재할당에 의해 변수의 타입이 언제든지 동적으로 변할 수 있다는 특징이 있다. 이와 같은 언어로 Python
이 존재한다.
동적 타입 언어의 단점
1. 복잡한 프로그램에서 변화하는 변수 값을 추적하기 힘듦
2. 값의 변경으로 타입이 변경하는 동적 타입 언어의 특성 상 값을 확인하기 전에는 타입을 확신할 수 없음
3. JS 엔진에 의해 암묵적으로 타입이 변환되기도 함
=> 유연성은 높지만 신뢰성이 떨어짐
변수 사용 시 주의할 사항
1. 변수는 꼭 필요한 경우에 한해서 제한적으로 사용
2. 변수의 유효 범위(스코프)를 최대한 좁게 만들어 부작용을 억제
3. 전역 변수는 최대한 사용하지 않도록 한다.
4. 변수보다는 상수를 사용해 값의 변경을 억제
5. 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
==
)동등 비교 연산자는 암묵적 타입 변환을 통해 타입을 일치시킨 후 같은 값인지 비교한다.
5 == '5'; // true
그러나 예측하기 어려운 결과를 만들어내기 때문에 사용하지 않는 편이 좋다.
'0' == ''; // false
0 == ''; // true
false == 0; // true
false == '0'; // true
false == null; // false
false == undefined; // false
null == undefined; // true
===
)좌항과 우항의 피연산자가 타입도 같고 값도 같은 경우 true
를 반환한다. -> 암묵적 타입 변환을 하지 않고 값을 비교한다.
5 === 5; // true
5 === '5'; // false
조건식 ? ... : ...
)삼항 조건 연산자 표현식은 값으로 평가될 수 있는 표현식인 문으로 if문을 사용할 수 없는 JSX 내부에서 대신 사용되는 방법이다.