
값의 종류를 말함
자바스크립트의 모든 값은 데이터 타입을 가짐
자바스크립트에는 8개 데이터 타입이 있으며,
원시 타입(Primitive Type)과 객체 타입(Reference/Object Type)으로 분류할 수 있다.
정수와 실수를 구분하는 다른 언어들과 달리, 자바스크립트는 모든 수를 실수로 처리함
정수만 표현하기 위한 데이터타입이 별도로 존재하지 않음
정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의
2진수로 저장되며, 자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에
이들 값을 참조하면 모두 10진수로 해석
Number Type이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표현 가능
정수 리터럴의 뒤에 n을 붙이거나 BigInt()를 호출해 생성 가능
내장 Math 메서드와 함게 사용할 수 없고, 연산에서 Number Type과 혼합해서 사용할 수 없음
텍스트 데이터를 나타내는 데 사용
0개 이상의 16비트 유니코드 문자의 집합으로 전 세계 대부분의 문자 표현 가능
작은 따옴표(''), 큰 따옴표(""), 백틱(``)으로 텍스트를 감싸며,
자바스크립트에서 가장 일반적인 표기법은 작은따옴표('')를 사용하는 것이다.
자바스크립트의 문자열은 원시 타입(Primitive Type)이며, 변경 불가능한 값(Immutable value)
ES6부터 템플릿 리터럴(Template Literal)이라고 하는 문자열 표기법 도입
불리언 타입의 값은 논리적 참/거짓을 나타내는 true/false 뿐
참/거짓으로 구분되는 조건에 의해 프로그램의 흐름을 제어하는 조건문에서 자주 사용
undefined type의 값은 undefined가 유일
var 키워드로 선언된 변수는 암묵적으로 undefined로 초기화
undefined는 개발자가 의도적으로 할당하기 위한 값이 아님
자바스크립트 var 키워드로 선언된 변수의 초기화를 위해 사용하는 값
따라서 개발자가 의도적으로 변수에 undefined를 할당하는 것을 권장하지 않음
변수에 값이 없음을 명시하고 싶을 때는 undefined 대신 null 할당
(최근에 출시된 책 You Don't Know Javascript Yet 에서는 null 대신 undefined를 권장)
null 타입의 값은 null이 유일하며, 변수에 값이 없다는 것을 의도적으로 명시할 때 사용
변수에 null 할당은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미
자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉터(Garbage Collector) 수행
함수가 유효한 값을 반환한 수 없는 경우에 명시적으로 null을 반환하는 경우도 있음
다른 값과 중복되지 않는 유일무이한 값
이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위하여 사용
symbol 이외의 원시 값들은 리터럴을 통해 생성하지만, 심벌은 Symbol 함수를 호출하여 생성
생성된 심벌 값은 외부로 노출되지 않음
자바스크립트는 객체 기반의 언어
자바스크립트를 이루고 있는 거의 모든 것이 객체임
위에서 살펴본 7가지 타입(number, bigint, string, boolean, undefined, null, symbol)을 제외하고 모두 객체 타입
자바스크립트의 변수는 선언이 아닌 할당에 의해서 타입이 결정됨
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음
이러한 특징을 '동적 타이핑(Dynamic typing)' 이라고 함
정적 타입 언어
변수를 선언할 때 데이터 타입을 사전에 선언 (명시적 타입 선언)
변수의 타입 변경이 불가능
타입에 맞는 값만 할당 가능
컴파일 시점에 타입 체크 수행
ex) C, Java, Kotlin, Go 등
동적 타입 언어
어떠한 데이터 타입의 값이라도 자유롭게 할당 가능
변수를 선언할 때 타입 선언하지 않음
값을 할당하는 시점에 변수의 타입이 동적으로 결정
변수의 타입을 언제든지 자유롭게 변경 가능
ex) Javascript, python, PHP 등