일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- getDerivedStateFromProps
- 에릭슨엘지
- BOJ
- React.js
- GirlsInICT해커톤
- axios
- Baekjoon
- Bestawards
- 15721
- react
- ts
- dataFetching
- Erricson
- typescript
- js
- 자바스크립트
- nodejs
- javascript
- 훈훈한자바스크립트
- Girls_In_ICT
- 코드캠프
- map
- next
- Unmounting
- filter
- 백준
- props
- props.key
- 이미지스캔
- 객체인지
- Today
- Total
민희의 코딩일지
[모던자바스크립트 딥다이브] 6장. 데이터 타입 본문
자바스크립트(ES6)는 7개의 데이터 타입을 제공한다. 7개의 데이터 타입은 원시타입 primitive type 과 객체 타입 object/reference type으로 분류할 수 있다.
원시타입 | 숫자 Number | 숫자, 정수와 실수 구분없이 하나의 숫자 타입만 존재 |
문자열 String | 문자열 | |
불리언 Boolean | 논리적 참 True와 거짓 False | |
undefined | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
null | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
심벌 symbol | ES6에서 추가된 7번째 타입 | |
객체 타입 | 객체, 함수, 배열 등 |
6.1 숫자 타입
자바스크립트는 하나의 숫자 타입만 존재한다. 자바스크립트의 숫자 타입은 모든 수를 실수로 처리한다. 이는 정수로 표시된다 해도 사실은 실수라는 것을 의미한다. 따라서 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있다.
숫자 타입의 세가지 특별한 값
- Infinity 양의 무한대- console.log(10/0);
- -Infinity 음의 무한대 - console.log(10/-0);
- NaN 산술 연산 불가 - console.log(1*’String’);
- *참고로 자바스크립트 엔진은 NAN, Nan, nan을 값이 아닌 식별자로 해석한다.
6.2 문자열 타입
문자열은 작은 따옴표 ‘’ , 큰 따옴표 “” , 혹은 백틱 `` 으로 텍스트를 감싼다.
6.3 탬플릿 리터럴
멀티라인 문자열, 표현식 삽입, 태그드 탬플릿 등 편리한 문자열 처리 기능을 제공한다. 탬플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리된다. 백틱을 사용해 표현한다 ``
6.3.1 멀티라인 문자열
일반 문자열 내에서는 줄바꿈이 허용되지 않는다. 멀티라인 문자열은 줄바꿈이 가능하다
var str = `Hello
world.`;
var template = `<ul>
<li><a href='#'>Home</a></li>
</ul>`;
6.3.2.표현식 삽입
문자열은 문자열 연산자 + 를 통해 연결할 수 있다. 표현식을 삽입하려면 **${}**으로 표현식을 감산다. 이때 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입된다.
var first = 'Ung-mo';
var last = 'Lee';
console.log(`My Name is ${first} ${last}.`);
6.4 불리언 타입
불리언 타입의 값은 논리적 참, 거짓을 나타내는 true와 false뿐이다.
6.5 undefined 타입
undefined는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다. 변수를 참조했을 때 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는, 즉 초기화되지 않은 변수라는 것을 알 수 있다.
6.6 null 타입
개발자가 변수에 값이 없다는 것을 명시하고 싶을 때 undefined를 할당하는 것은 혼란을 줄 수 있으므로 권장하지 않는다. 따라서 null을 사용한다. null은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
6.7 심벌 타입
심벌은 변경 불가능한 원시 타입의 값이다. 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다. 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값이다.
// 심벌 값 생성
var key = Symbol('key);
console.log(typeof key); // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다
obj[key] = 'value';
console.log(obj[key]); // value
6.8 객체 타입
자바스크립트는 객체 기반의 언어이며 자바스크립트를 이루고 있는 거의 모든 것이 개체이다. (앞서 언급한 primitive type 6개를 제외한 모든 값이 객체 타입이다.)
6.9 데이터 타입의 필요성
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10 동적 타이핑
6.10.1 동적 타입 언어와 정적 타입 언어
정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다. 컴파일 시점에 타입 체크를 수행한다.
자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 다만 var, let, const 키워드를 사용해 변수를 선언할 뿐이다. 자바스크립트의 변수는 미리 선언한 데이터 타입의 값만 할당할 수 있는 것이 아니다. 어떠한 타입의 데이터 값이라도 자유롭게 할당할 수 있다. 자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있다.
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다 (=동적 타이핑, 자바스크립트: 동적 타입 언어)
변수는 기본적으로 타입을 갖지 않지만 값은 타입을 갖는다.
6.10.2 동적 타입 언어와 변수
동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다.
변수는 꼭 필요한 경우에 한해 제한적으로 사용해야 한다. 변수의 유효 범위는 최대한 좁게 만들어 변수의 부작용을 억제해야 한다. 전역 변수는 최대한 사용하지 않도록 한다. 변수보다는 상수를 사용해 값의 변경을 억제한다. 변수 이름을 잘 짓자
'WEB FE > 모던자바스크립트 딥다이브' 카테고리의 다른 글
[모던자바스크립트 딥다이브] 11장. 원시 값과 객체의 비교 (0) | 2023.01.05 |
---|---|
[모던자바스크립트 딥다이브] 8장. 제어문 (0) | 2022.12.22 |
[모던자바스크립트 딥다이브] 7장. 연산자 (0) | 2022.12.22 |
[모던자바스크립트 딥다이브] 5장. 표현식과 문 (1) | 2022.12.21 |
[모던자바스크립트 딥다이브] 4장. 변수 (1) | 2022.12.21 |