JS/[책] 모던 JS deep dive

6장. 데이터 타입

web_seul 2022. 12. 6. 19:54

6.1 숫자 타입 : 모든 수를 실수로 처리하며 배정밀도 64비트 부동소수점 형식을 따름

*배정밀도 64비트 부동소수점

console.log(1 === 1.0);	//true

var bubary = 0b01000001;	//2진수
var octal = 0o101;	//8진수
var hex = 0x41;	//16진수

console.log(binary);	//65
console.log(octal);	//65
console.log(hex);	//65
console.log(binary === octal);	//true
console.log(octal === hex);	//true

 

Infinity : 양의 무한대

-Infinity : 음의 무한대

NaN : 산술 연산 불가 (nan(x), Nan(x)..)

 

6.2 문자열 타입 : 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합, JS엔진이 키워드나 식별자 같은 토큰으로 인식하기때문에 문자열은 큰따옴표(""), 작은따옴표(''), 백틱(``)으로 감싼다, 따옴표가 없으면 공백 문자도 가질 수 없음, 원시타입으로 변경불가능한 값(immutable value)

var string;
string = "큰따옴표 안의 '작은따옴표'는 문자열로 인식됨";

string = hello;	//ReferenceError: hello is not defined, 식별자로 인식함

 

6.3 템플릿 리터럴 : 백틱(``)을 사용하여 표현

var template = `Template literal`;
console.log(template);	//Template literal

- 멀티라인 문자열

//일반 문자열 내에서는 개행이 허용되지 않음 -> 이스케이프 시퀀스를 사용해야함
var template = '<ul>|n|t<li><a href="#">Home</a></li>|n</ul>';
console.log(template);

//템플릿 리터럴 내에서는 개행이 허용됨
var template = `<ul>
    <li><a href="#">Home</a></li>
</ul>`;
console.log(template);

//출력결과
//<ul>
//  <li><a href="#">Home</a></li>
//</ul>
이스케이프 시퀀스 의미
|0 Null
|b 백스페이스
|f 폼피드, 프린터 풀력시 다음페이지의 시작점으로 이동
|n 개행, 다음 행으로 이동
|r 개행, 커서를 처음으로 이동
|t 탭(수평)
|v 탭(수직)
|uXXXX 유니코드
|' 작은따옴표
|" 큰따옴표
|| 백슬래시

 

- 표현식 삽입 : +를 사용하여 문자열 연결

var first = 'Ung-mo';
var last = 'Lee';

//ES6문자열 연결
console.log('My name is' + first + '' + last + '.');	//My name is Umg-mo Lee.

//ES6표현식 삽입
console.log(`My name is ${first} ${last}.`);	//My name is Umg-mo Lee.

 

 

6.4 불리언 타입 : true/false

6.5 undefined 타입 : var 로 선언한 변수는 암묵적으로 undefined로 초기화됨, 즉 undefined가 반환되면 할당되지 않은 변수

6.6 null 타입 : 변수에 값이 없다는 것을 의도적으로 명시할 때 사용, 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미(이전에 할당된 값에 대한 참조를 명시적으로 제거함), JS엔진에 의해 가비지 콜렉션이 수행됨 (Null(x), NULL(x)..)

var foo = 'Lee';

//이전 참조 제거
//유용하지 않음, 변수 소멸
foo = null;

6.7 심벌타입 : 변경 불가능한 원시 타입의 값, 유일무이한 값, 주로 충돌위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용, Symbol함수를 호출하여 생성, 심벌값은 외부에 노출되지 않으며 중복되지 않음

var key = Symbol('key');
console.log(typeof key);	//symbol

 

6.8 객체타입 : JS는 객체기반의 언어이며 JS를 이주는 거의 모든것이 객체

6.9 데이터 타입의 필요성

- 데이터 타입에 의한 메모리 공간의 확보와 참조 : 변수에 할당되는 갑스이 데이터 타입에 따라 필요한 메모리 공간의 크기 결정

- 데이터 타입에 의한 값의 해석 : 메모리의 2진수 0100 0001을 숫자 65로 해석할지 문자 'A'로 해석할 지 결정

 

6.10 동적 타이핑

  정적 타입 언어 동적 타입 언어
타입 선언 여부 변수 선언시 타입 선언, 변경x, 해당타입의 값만 할당가능 변수 선언시 타입 선언x,  var,let,const키워드 사용, 자유롭게 할당 가능
변수 타입 시점 컴파일(선언) 시점에 타입체크, 에러 출력 할당 시점에 타입 결정
특징 타입의 일관성, 안정적인 코드, 에러 감소 편리함, 유연성, 위험성
해당 언어 C, C++, 자바, 코틀린, 고 등 Javascript

 

* 무분별한 변수사용x
* 스코프를 좁혀 부작용 억제
* 전역 변수 지양(복잡성 증가, 오류 원인 특정 어려움)
* 변수보다 상수 지향(const)
* 변수명은 목적이나 의미 파익이 용이하도록

"가독성 좋은 코드가 좋은 코드"

 

반응형

'JS > [책] 모던 JS deep dive' 카테고리의 다른 글

11장. 원시값과 객체의 비교  (0) 2022.12.14
7장. 연산자  (0) 2022.12.07
5장. 표현식과 문  (0) 2022.12.02
4장. 변수  (0) 2022.12.02
20강 - strict mode  (0) 2022.03.05