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 |