얼레벌레
모던자바스크립트 Deep Dive - 6장 데이터 타입 본문
자바스크립트는 7개의 데이터 타입이 있음
원시 타입(primitive type) - 숫자(number), 문자열(string), 불리언(boolean), undefined, null, 심벌(symbol)
객체 타입(object/reference type) - 객체, 함수, 배열 등
▪️ 숫자 타입
- C나 Java와 다르게, float, int, 2/8/16진수 등에 구분 없이 64비트 부동소수점(실수) 형식의 하나의 숫자 타입만 존재한다.
- 세가지 특별한 값을 표현할 수 있다 ⇨ Infinity, -Infinity, NaN(not-a-number)
// 숫자 타입은 모두 실수로 처리!
console.log(1 === 1.0) // True
// 세가지 특별한 값
console.log(1/0) // Infinity
console.log(1/-0) // -Infinity
console.log(1*'string') // NaN
▪️ 문자열 타입
- '', "", `` 으로 감싸서 표현함 ⇨ 키워드나 식별자 같은 토큰과 구분하기 위함
- 자바스크립트의 문자열은 원시타입으로 변경 불가능한 값임
✔️ 템플릿 리터럴(template literal)
- ``(백틱)을 이용해 표현함
- 표현식 삽입(expression interpolation) 가능 ⇨ ${}로 표현식을 감싼다.
- 평가 결과가 문자열이 아니더라도 문자열타입으로 강제 변환돼 삽입
// backtick이 아닌 escape sequence 사용 시
let template = '<ul>\n\t<li><a href='#none'>Home</a></li>\n</ul>'
// backtick 사용 시(template literal)
let template = `<ul>
<li><a href='#none'>Home</a></li>
</ul>`;
// expression interpolation 미사용 시
const first='Nang ni';
const last='Kim';
console.log('My name is '+first+' '+last+'.') // My name is Nang ni Kim.
// expression interpolation 사용 시
console.log(`My name is ${first} ${last}.`) // My name is Nang ni Kim.
▪️ 불리언 타입
- 논리적 참, 거짓을 나타냄 ⇨ true, false
▪️ undefined 타입
- 값으로 undefined가 유일
- 개발자가 의도적으로 할당하는 값이 아닌, 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값
- 값이 없다는 것을 명시하고 싶은 경우는 undefined가 아닌 null을 사용해야 함
▪️ null 타입
- 값으로 null이 유일
- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용 ⇨ 즉, 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미
- 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함
▪️ 심벌 타입
- 다른 값과 중복되지 않는 유일한 값
- 보통 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- Symbol() 함수를 사용해 생성
❗️ 데이터 타입이 필요한 이유
0️⃣ 값을 저장할 때 확보할 메모리 공간의 크기를 결정하기 위함
1️⃣ 값을 참조할 때 한번에 읽을 메모리 공간의 크기를 결정하기 위함
2️⃣ 메모리에서 읽은 2진수, 즉 비트의 나열을 어떻게 해석할지 결정하기 위함
✔️ 정적 타입 언어와 동적 타입 언어
▫️ 정적 타입 언어(C, Java 등)
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류를 사전에 선언
- 변수 타입 변경 불가, 변수에 선언한 타입에 맞는 값만 할당 가능
▪️동적 타입 언어(Python, Javascript 등)
- 변수 선언 시 사전에 타입 선언 X
- 어떤 데이터타입이든 할당 가능
- 선언이 아닌 할당에 의해 타입 결정됨 - 타입 추론 (type inference)
⚠️ 따라서 동적 타입 언어는 유연성은 높지만 신뢰성은 낮아 변수 사용 시 주의를 요함!
- 변수는 제한적으로 사용한다
- 전역변수 사용을 최대한 자제한다
- 의미 있는 변수 네이밍
- 변수의 유효 스코프를 최대한 좁게 만들어 오류 발생 확률을 낮춘다
- 변수보다는 상수(const)를 사용해 값의 변경을 억제한다
'JavaScript > 모던자바스크립트 Deep Dive' 카테고리의 다른 글
모던자바스크립트 Deep Dive - 9장 타입 변환과 단축 평가 (0) | 2022.03.20 |
---|---|
모던자바스크립트 Deep Dive - 8장 제어문 (0) | 2022.03.19 |
모던자바스크립트 Deep Dive - 7장 연산자 (0) | 2022.03.19 |
모던자바스크립트 Deep Dive - 5장 표현식과 문 (0) | 2022.03.14 |
모던자바스크립트 Deep Dive - 4장 변수 (0) | 2022.03.14 |