
자바스크립트(ES6)은 7개의 데이터 타입 제공 -> 각 타입은 같은 모양이라도 목적, 메모리 크기, 해석하는 방법 등 다름
자바스크립트는 모든 수를 실수로 처리함 (표기는 정수여도 처리는 실수로 함 -> 정수끼리 나눠도 실수 나올 수 있음)
- Infinity:양의무한대
- -Infinity:음의무한대
- NaN:산술연산불가not a number) -> 자바스크립트는 대소문자 구별 (틀리면 숫자가 아닌 식별자 처리)
위 3가지 경우도 숫자로 구분함
텍스트 데이터 표현에 사용 -> 유니코드(UTF-16)
문자열은 원시 타입 => 변경 불가능한 값 의미
“”(큰따옴표), ‘’(작은 따옴표), ``(백틱) 으로 감싸서 선언 -> 안 감싸면 키워드 / 식별자 같은 토큰으로 인식됨
ES6부터 도입된 새로운 문자열 표기법, ``(백틱) 사용 => 런타임에 일반 문자열로 변환 되어 처리됨
더 편리한 문자열 처리 기능 제공
일반 문자열에서 줄바꿈 등 공백은 이스케이프 시퀀스 사용해야함
하지만 템플릿 리터럴에서는 모든 공백이 있는 그대로 적용됨
문자열 연결은 + 로 할 수 있음
하지만 템플릿 리터럴에서는 ${}으로 감싸서 사용 가능 -> 타입이 문자열로 강제 변환되어 삽입됨
참(true), 거짓(false) -> 조건문에서 자주 사용
자바스크립트에서 변수가 선언될 때, undefined으로 초기화됨(쓰레기값 대신)
-> 개발자가 의도적으로 변수에 값이 없음을 말하고 싶다면 null 사용 권장
null의 사용법
1. 의도적으로 값이 없음을 명시할 때 사용 (대소문자 구분!) -> 이전에 참조하던 값을 더 이상 사용하지 않겠다는 의미
2. 함수가 유효한 값을 반환할 수 없는 경우, 에러 대신 null 반환
ES6에서 추가된 원시 타입 값, 다른 값과 중복 되지 않는 유일한 값 -> 이름이 충돌할 위험 없는는 객체의 유일한 프로퍼티 키 만드는 목적으로 사용
Symbol 함수 호출을 해서 생성 -> 외부에 값 노출 X, 다른 값과 중복 X
var key = Symbol('key');
console.log(typeof key); // symbol
자바스크립트는 객체 타입 언어 -> 거의 모든 것이 객체임
자바스크립트 엔진은 데이터 타입에 따라 메모리 공간의 크기를 확보함
값을 참조할 때도 타입을 보고, 한번에 읽어들일 공간 크기를 확보함
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해 필요함
정적 타입 언어는 변수의 타입을 변경할 수 없고, 변수에 선언한 타입에 맞는 값만 할당할 수 있음
동적 타입 언어는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고, 변수의 타입을 언제든지 자유롭게 변경할 수 있음 -> 선언이 아닌 할당에 의해 타입이 결정됨(타입 추론)
변수는 타입을 갖지 않지만, 값은 타입을 가짐 -> 변수에 할당된 값에 의해 변수의 타입이 결정되는 것
변수의 타입을 자유롭게 바꾸는 것은 편리함을 주지만 위험성도 있음
따라서 다음과 같은 주의사항을 지켜야함
- 변수는 꼭 필요한 경두뻬 한해 제한적으로 사용(많을 수록 오류 발생 가능성 높임)
- 변수의 유효 범위(스코프)를 최대한 좁게 만들어 변수의 부작용 억제
- 전역 변수 사용 지양(프로그램 복잡성 증가, 처리 흐름 추적 어려움, 오류 원인 특정 어려움)
- 변수보다는 상수를 사용해 값의 변경을 억제
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍하기