728x90
반응형
데이터 타입 종류
- 원시
- 숫자(Number)
- 문자열(String)
- 불리언(Boolean)
- Undefined
- null
- 심벌(Symbol)
- 객체
- 객체(Object)
- 함수(Function)
- 배열(Array)
숫자(Number)
- JS는 하나의 숫자 타입만 존재 (int, log, float 없음)
- console.log(1 === 1.0); // true
- 모든 수를 실수로 처리
- 배정밀도 64비트 부동소수점 형식
- 숫자를 표현할 때 부호 비트, 지수, 가수부분으로 나누어서 숫자를 표현하기 때문에 오차가 발생할 수도 있음 (실수를 정확히 표현하지는 못함)
- 특별한 값 (Infinity, NaN)
- // 숫자 타입의 세 가지 특별한 값 console.log(10 / 0); // Infinity console.log(10 / -0); // -Infinity console.log(1 * 'String'); // NaN var x = nan; // ReferenceError: nan is not defined // NaN 의 경우 대소문자를 구분하여 써주어야 하며 다르게 사용하였을 시, ReferenceError가 발생
문자열 타입 ( ‘’, “”, `` )
- 변경 불가능한 값(문자열 생성 시 문자열 변경 X)
- 종류
- ' ' (작은 따옴표)
- " " (큰 따옴표)
- (백틱, 템플릿 리터럴) - 키보드1 왼쪽에 있는 기호
- 위 값들은 묶여있다. 묶는 이유 : 키워드나 식별자 같은 토큰과 구분
템플릿 리터럴 (멀티라인, ${})
- ES6부터 도입된 문법
- 런타임에 일반 문자열로 변환되어 처리
- 멀티라인 문자열, 표현식 삽입을 할 때 사용
- 멀티라인 문자열
- 기존 따옴표(’ “) 이스케이프 \\n과 같은 이스케이프 시퀀스를 사용해야 되는데 이를 사용하지 않고도 줄바꿈이 허용되며 모든 공백도 있는 그대로 적용
- 표현식 삽입
- ${variable} 형식으로 백 틱안에 있는 문자열 안에 변수를 넣어 주면 간단히 문자열에 넣어서 사용 가능
- 멀티라인 문자열
Boolean 타입 ( true & false )
- true & false
- 참과 거짓, 각각 JS에서 1과 0을 반환
undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화
- 변수에 값이 없다는 것을 알리고 싶을 때는 null을 사용
null 타입
- 변수에 값이 없다는 것을 의도적으로 명시하는 것
- 이 null을 할당하는 것은 더 이상 변수가 참조하던 값을 참조하지 않고, 참조를 제거하며, 메모리 공간에 가비지 컬렉션을 수행
- HTML의 경우, querySelector 사용 시, 조건에 부합하는 요소가 없다면 null을 반환
선언과 정의
- 선언 : 다른 언어에선 선언은 식별자의 존재를 알리는 것,
- 정의 : 메모리 주소를 할당하는 것
- 자바스크립트는 변수를 선언하면 암묵적으로 정의가 이루어짐(var a; 라는 코드가 실행되면 undefined가 할당되는 것)
- ECMASCript 사양
- 변수 : '선언한다'라고 표현
- 함수 : '정의한다'라고 표현
심볼 타입 ( Symbol() )
- 변경 불가능한 원시 타입의 값
- 다른 값과 중복 되지 않는 유일 무이한 값
- 심벌은 리터럴로 못 만들고 Symbol()함수를 사용
Symbol('값') // Symbol타입 사용
(Symbol()) + '' // -> TypeError: Cannot convert a Symbol value to a string
심볼 테이블
컴파일러 또는 인터프리터는 심볼 테이블 이라고 부르는 자료 구조를 통해 식별자를 키(Key)로 바인딩된 값(Value)의 메모리 주소, 데이터 타입, 스코프 등을 관리
객체 타입 ( {}, [array] )
- 나머지 모든 타입
- JS는 객체 기반 언어, JS를 이루는 거의 모든 것이 객체
데이터 타입의 필요성
- 값 저장 시, 확보해야 하는 메모리 공간의 크기 결정
- 값 참조 시, 읽어들어야 하는 메모리 공간 크기 결정
- 메모리에서 읽은 값을 어떻게 해석할 지 결정
- 데이터 타입에 의한 메모리 공간의 확보와 참조
- 데이터 타입에 따라 메모리 공간을 얼마나 잡고 읽어들어야 할지 확인하기 위해 (메모리 공간의 크기)
동적 타이핑
- 타입 언어
- 정적 : 데이터의 타입을 사전에 정의 (int, char 등의 키워드 이용)
- 동적 : 타입을 사전에 정의 X (JS : var, let, const)
- JS는 변수의 선언이 아닌 할당에 의해 타입이 결정(타입 추론)된다. 선언시는 무조건 undefined
- 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
var foo;
console.log(typeof foo); // undefined
foo = 3;
console.log(typeof foo); // number
foo = 'Hello';
console.log(typeof foo); // string
foo = true;
console.log(typeof foo); // boolean
foo = null;
console.log(typeof foo); // object
foo = Symbol(); // 심벌
console.log(typeof foo); // symbol
foo = {}; // 객체
console.log(typeof foo); // object
foo = []; // 배열
console.log(typeof foo); // object
foo = function () {}; // 함수
console.log(typeof foo); // function
- 변수 : 타입X, 값 : 타입O. 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정
동적 타입 언어와 변수
- 동적 타입 언어의 구조적 단점
- 변화하는 변수 값을 추적하기 어렵고, 값을 확인하기 전에는 타입을 확신할 수 없다.
- 유연성은 높지만 신뢰성이 떨어진다.
- 동적 변수 사용 시 유의 사항
- 변수는 꼭 필요한 경우에 한해 사용
- 변수의 유효범위를 최대한 좁게하여 변수 부작용을 억제
- 전역변수는 최대한 사용 X
- 변수보다는 상수를 사용
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
반응형
'언어 > JavaScript Deepdive' 카테고리의 다른 글
5장 : 제어문 (0) | 2024.03.31 |
---|---|
4장 : 연산자 (0) | 2024.03.31 |
2장 : 표현식 & 문 (0) | 2024.03.31 |
1장 : 변수 & 식별자 (0) | 2024.03.31 |
0장 : 개발자 도구 & JavaScript (0) | 2024.03.31 |