동그란 도그린
[모던 자바스크립트 Deep Dive🦎] 6장 : 데이터 타입 본문
원시 타입 | 객체 타입 |
|
📍 숫자 타입
- 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식 (모든 수를 실수로 처리)
- 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입 제공 X ⇒ 값 참조하면 모두 10진수로 해석됨
- 아래의 3가지 값 표현 가능
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- NaN : 산술 연산 불가(not-a-number)
- 자바스크립트는 대소문자 구별 ⇒ NAN, Nan, nan을 값이 아닌 식별자로 해석
📍 문자열 타입
- 자바스크립트에서 가장 일반적인 문자열 표기법은 ‘작은 따옴표’ 사용하는 것
- 문자열을 따옴표로 감싸는 이유는 키워드나 식별자 같은 토큰과 구별하기 위함
📍 템플릿 리터럴
- ES6부터 도입된 문자열 표기법
- 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리됨
- 백틱( ` ` )을 이용해 표현
- 일반 문자열에서는 줄바꿈(개행)이 허용되지 않아 이스케이프 시퀀스를 이용해야 하지만, 템플릿 리터럴 내에서는 이스케이프 시퀀스 없이 줄바꿈이 허용되고 모든 공백도 그대로 적용됨
- 연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작
- 표현식 삽입( ${ } )은 반드시 템플릿 리터럴 내에서 사용해야 함
📍 undefined 타입
- 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값
📍 null 타입
- 자바스크립트는 대소문자를 구별하므로 null은 Null, NULL 등과 다름
- 변수에 null을 할당하는 것은 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미, 자바스크립트 엔진은 아무도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션 수행
- 함수가 유효한 값을 반환할 수 없는 경우 null을 반환하기도 함
📍 심벌 타입
- 심벌 값은 다른 값과 중복되지 않는 유일한 값 ⇒ 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- 생성된 심벌 값은 외부에 노출되지 않음
📍 객체 타입
- 자바스크립트는 객체 기반의 언어
📍 데이터 타입의 필요성
- 자바스크립트 엔진은 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보함 (ECMAScript 사양은 문자열과 숫자 타입 외의 데이터 타입의 크기를 명시적으로 규정하지 않음⇒자바스크립트 엔진 제조사의 구현에 따라 다를 수 있음)
- 모든 값은 메모리에 2진수(비트의 나열)로 저장됨
- 데이터 타입이 필요한 이유 3가지
- 값을 저장할 때 확보할 메모리 크기를 결정하기 위함
- 값을 참조할 때 한 번에 읽어야 할 메모리 크기를 결정하기 위함
- 메모리에서 읽은 2진수를 어떻게 해석할지 결정하기 위함 (데이터 타입에 따라 해석 결과가 다르므로)
📍 동적 타이핑
- 정적 타입 언어는 컴파일 시점에 타입 체크(선언한 데이터 타입에 맞는 값을 할당했는지 검사)를 수행, 타입 체크 통과 못하면 에러 발생하고 프로그램 실행을 막음
- 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정됨(타입 추론)
- 자바스크립트는 재할당에 의해 변수의 타입이 언제든 변화 가능 (동적 타이핑)
- 변수는 타입을 갖지 않으며, 현재 변수에 할당된 ‘값’에 의해 변수의 타입이 동적으로 결정됨
- 단점
- 복잡한 프로그램에서는 변화하는 변수의 값을 추적하기 어려움
- 값을 확인하기 전에는 타입을 확신할 수 없음
- 개발자의 의도와 관계없이 자바스크립트 엔진에 의해 타입이 자동으로 변환되기도 함
'FrontEnd > Javascript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive🦎] 8장 : 제어문 (0) | 2023.03.29 |
---|---|
[모던 자바스크립트 Deep Dive🦎] 7장 : 연산자 (0) | 2023.03.29 |
[자바스크립트 완벽 가이드🦏] 4장 : 표현식과 연산자 (0) | 2023.03.22 |
[모던 자바스크립트 Deep Dive🦎] 5장 : 표현식과 문 (0) | 2023.03.22 |
[모던 자바스크립트 Deep Dive🦎] 4장 : 변수 (0) | 2023.03.20 |
Comments