데이터타입
데이터타입 : 값의 종류
| 구분 | 데이터 타입 | 설명 |
| 원시 타입 | 숫자 타입 | 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재 |
| 문자열 타입 | 문자열 | |
| 불리언 타입 | 논리적 참(true) 과 거짓 (false) | |
| undefined 타입 | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
| null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
| 심벌 타입 | ES6에서 추가된 7번째 타입 | |
| 객체 타입 | 객체, 함수, 배열 등 |
숫자 타입
자바스크립트는 모든 수를 실수로 처리한다
추가적인 세 가지 특별한 값
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- NaN : 산술 연산 불가 (not-a-number)
문자열 타입
문자열 타입 : 텍스트 데이터를 나타내는 데 사용
문자열은 작은따옴표, 큰따옴표, 백틱으로 텍스트를 감싼다
string1 = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다";
string2 = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다";
자바스크립트의 문자열은 원시타입이며 변경 불가능한 값
템플릿 리터럴
템플릿 리터럴 : 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능 제공
템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리
백틱(``)을 사용해 표현
멀티라인 문자열
일반 문자열 내에서는 줄바꿈 (개행)이 허용되지 않음 → 줄바꿈 등의 공백을 표현하려면 백슬래시로 시작하는 이스케이프 시퀀스 사용
템플릿 리터럴 내에서는 줄바꿈 및 공백이 있는 그대로 적용
var template = `<ul>
<li><a href="#">Home</a></li>
</ul>;
console.log(template);
// 결과
<ul>
<li><a href="#">Home</a></li>
</ul>
표현식 삽입
문자열 연산자 + 를 사용해 문자열을 연결할 수 있지만 템플릿 리터럴에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능
var first = "E";
var last = "chichi";
// 문자열 연결
console.log("My name is " + first + " " + last + "."); // My name is Echichi.
// 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Echichi.
불리언 타입
불리언 타입의 값은 참, 거짓을 나타내는 true 와 false 뿐이다
undefined 타입
undefined 타입의 값은 undefined 가 유일하다
var로 선언한 변수에 첫 할당이 이루어질 때까지 빈 상태 (대부분 비워져있지 않고 쓰레기 값이 있음) 로 두지 않고 undefined 로 초기화
undefined 는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값
변수에 값이 없다는 것을 명시하고 싶을 때는 undefined가 아닌 null을 할당
null 타입
null 타입의 값은 null 이 유일하다
변수에 값이 없다는 것을 의도적으로 명시 (의도적 부재)할 때 사용
변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미 (이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미)
함수가 유용한 값을 반환할 수 없는 경우 명시적으로 null 반환
<!DOCTYPE html>
<html>
<body>
<script>
var element = document.querySelector(".echichiClass");
// HTML 문서에 echichiClass 클래스를 갖는 요소가 없다면 null을 반환
console.log(element); // null
</script>
</body>
</html>
심벌 타입
변경 불가능한 원시 타입의 값
심벌 값은 다른 값과 중복되지 않는 유일무의한 값
충돌할 위험이 없는 객체의 유일하 프로퍼티 키를 만들기 위해 사용
var key = Symbol('key');
console.log(typeof key); // symbol
// 객체 생성
var myObj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 "프로퍼티 키"로 사용
myObj[key] = 'value';
console.log(obj[key]); // value
객체 타입
자바스크립트를 이루고 있는 거의 모든 것이 객체
데이터 타입의 필요성
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
동적 타이핑
정적 타입 언어
- 변수를 선언할 때 할당할 수 있는 데이터 타입을 사전에 선언해야함 (명시적 타입 선언)
- 컴파일 시점에 타입 체크를 수행
동적 타입 언어
- 변수를 선언할 때 할당할 수 있는 데이터 타입을 사전에 선언하지 않음
- 변수에 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 자유롭게 타입 변경 가능
동적 타이핑
- 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입 결정 (타입 추론)
- 재할당에 의해 변수의 타입은 언제든지 변할 수 있음
- 할당된 값에 의해 변수의 타입이 동적으로 결정됨
'Javascript' 카테고리의 다른 글
| [모던 자바스크립트 Deep Dive] 06. 타입 변환과 단축 평가 (0) | 2023.11.05 |
|---|---|
| [모던 자바스크립트 Deep Dive] 05. 제어문 (0) | 2023.11.05 |
| [모던 자바스크립트 Deep Dive] 04. 연산자 (0) | 2023.11.04 |
| [모던 자바스크립트 Deep Dive] 02. 표현식과 문 (0) | 2023.11.04 |
| [모던 자바스크립트 Deep Dive] 01. 변수 (0) | 2023.11.02 |