| 구분 | 데이터타입 | 설명 |
| 원시타입 | 숫자(number) 타입 | 수자, 정수와 실수 구분없이 하나의 숫자 타입만 존재 |
| 문자열(String) 타입 | 문자열 | |
| 불리언(boolean) 타입 | 논리적 참(true)와 거짓(false) | |
| undefined 타입 | var키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
| null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
| 심벌(symbol) 타입 | ES6에서 추가된 7번째 타입 | |
| 객체타입 | 객체, 함수, 배열 등 | |
#숫자 타입
-C나 자바의 int, long, float, double등과 같은 숫자 타입이 아닌 하나의 숫자타입만 존재한다.
-모든 수를 실수로 처리하며 정수만 표현하기 위한 데이터 타입은 존재하지 않는다.
-숫자타입은 세가지 특별한 값도 표현할 수 있다.
Infinity : 양의 무한대 / -Infinity : 음의 무한대 / NaN : 산술 연산 불가(not-a-number)
console.log(10/0); //Infinity
console.log(10/-0); //-Infinity
console.log(1*'String') //NaN
-자바스크립트는 대소문자를 구별하므로 NaN을 다른 대소문자로 쓰면 식별자로 해석한다.
#문자열 타입
-문자열은 작은따옴표(' '), 큰 따옴표(" "), 백틱(` `)으로 텍스트를 감싼다. 가장 일반적으로는 작은따옴표를 사용한다.
-문자열을 따옴표로 감싸는 이유는 키워드나 식별자 같은 토큰과 구분하기 위해서이다.
-따옴표로 문자열을 감싸지 않으면 공백문자(스페이스)도 문자로 포함시킬 수 없다.
-변경불가능한 값(immutable value)이다.
#템플릿 리터럴
-멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리기능을 제공한다.
-템플릿 리터럴은 백틱(` `)을 사용해 표현한다.
※멀티라인 문자열
일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다. → 줄바꿈 등의 공백(white space)을 표현하려면 백슬래시(\)로 시작하는 이스케이프 시퀀스(escape sequence)를 사용해야 한다.
| 이스케이프 시퀀스 | 의미 |
| \0 | Null |
| \b | 백스페이스 |
| \f | 폼 피드(Form Feed). 프린터로 출력할 경우 다음 페이지의 시작지점으로 이동한다 |
| \n | 개행(Line Feed). 다음 행으로 이동 |
| \r | 개행(Carriage Return). 커서를 처음으로 이동 |
| \t | 탭(수평) |
| \v | 탭(수직) |
| \uXXXX | 유니코드. ex) \u0041은 'A', 'uD55C'는 '한', \u{1F600}는 이모티콘이다. |
| \' | 작은따옴표 |
| \" | 큰따옴표 |
| \\ | 백슬래시 |
-일반적인 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.
var template = '<ul>\n\t<li><a href="#">Home</a></li>\n<ul>'
//템플릿 리터럴
var template = `<ul>
<li><a href="#">Home</a></li>
<ul>`;
위 두 문의 출력결과는 같다.
※표현식 삽입
-문자열은 문자열 연산자+를 통해 연결할 수 있다.
var first = 'Ung-mo';
var last = 'Lee';
//ES5 문자열 연결
console.log('My name is ' +first+' '+last+'.');
//My name is Ung-mo Lee.
-템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열 삽입을 할 수 있다.(=문자열 연산보다 가독성 좋고 간편하게 문자열을 조합할 수 있다.)
-표현식을 삽입하려면 ${ }으로 표현식을 감싼다.
-템플릿 리터럴이 아닌 일반 문자열에서의 표현식은 문자열로 취급된다.
var first = 'Ung-mo';
var last = 'Lee';
//ES5 문자열 연결
console.log(`My name is ${first} ${last}.`);
//My name is Ung-mo Lee.
#undefined 타입
-undefined타입은 undefined가 유일하다.
-변수를 참조했을 떄 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는, 즉 초기화되지 않은 변수라는 것을 알 수 있다.
-변수에 값이 없다는 것을 명시하고 싶을 때는 null을 사용한다
#null 타입
-null은 변수에 값이 없다는 것을 의도적으로 명시/의도적부재(intentional absence)할 때 사용한다.
-변수에 null을 할당하는 것은더이상 값을 참조하지 않겠다는 의미이다.
-자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행한다.
-함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다
ex) document.querySelector 메서드는 조건에 부합하는 HTML요소를 검색할 수 없는 경우 에러 대신 null을 반납
#심벌타입
-변경 불가능한 원시타입의 값
-다른 갑과 중복되지 않는 유일 무이한 값
-유일한 프로퍼티 키를 만들기 위해 사용
-Symbol 함수를 호출해서 생성할 수 있다. 심벌 값은 외부에 노출되지 않으며 중복되지 않느다.
//심벌 값 생성
var key = Symbol('key');
console.logtypeof key); symbol
//객체 생성
var obj = {};
//이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); //value
#데이터 타입의 필요성
※데이터 타입에 의한 메모리 공간의 확보와 참조(저장할때 확보할, 읽어들어야할 메모리 공간의 크기)
ex)자바스크립트는 숫자 타입의 값을 생성할 때 배정밀도 64비트(8바이트) 부동소수점 형식을 사용한다.
※데이터 타입에 의한 값의 해석
모든 값은 데이터타입을 가지며, 메모리에 2진수/비트의 나열로 저장된다. 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석할 수 있다. ex) 메모리에 저장된 값 0100 0001은 숫자로 해석하면 65 문자열로 해석하면 'A'이다.
#동적 타이핑
※정적 타입 언어
-정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
ex) char(-128 ~ 127) int(-2,124,483,648 ~ 2,124,483,647)
-정적 타입 언어는 컴파일 시점에 타입체크를 수행한다. 통과 못하면 에러 발생, 실행 막힘
-C, C++, 자바. 코틀린, 고, 하스켈, 러스트, 스칼라 등이 있다
※동적 타입 언어
-자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다.
-var, let, const키워드 만 사용한다. (어떠한 타입의 값이라도 자유롭게 할당 가능)
-typeof연산자를 사용해서 타입을 조사할 수 있다. (typeof ㅕㅇ산자 : 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환)
-자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입추론)된다.
-동적 타이핑 : 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
-자바스크립트를 정적 타입 언어와 구별하기 위해 동적타입 언어(dynamic/weak type)라 한다.
-자바스크립트, 파이썬, PHP, 루비, 리스프, 펄 등이 있다.
※동적 타입 언어 단점
-자바스크립트는 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변환되기도 한다.
-동적타입 언어는 유연성(flexibility)은 높지만 신뢰성(reliability)은 떨어진다.
'Javascript > JavaScript_스터디' 카테고리의 다른 글
| Ajax 프레임워크 실행하기 (0) | 2022.03.11 |
|---|---|
| [JavaScript_DeepDive] 8. 제어문 (0) | 2022.03.11 |
| [JavaScript_DeepDive] 7. 연산자 (0) | 2022.03.10 |
| [JavaScript_DeepDive] 5. 표현식과 문 (0) | 2022.03.10 |
| [JavaScript_DeepDive] 4. 변수 (0) | 2022.03.09 |
댓글