자바스크립트에서 특정 값은 항상 특정 자료형에 속한다.
여덟 가지 기본 자료형이 있다.
변수는 자료형에 관계없이 모든 데이터일 수 있다. 즉 자료형이 바뀔 수 있다.
이처럼 변수의 자료형이 언제든지 바뀔 수 있는 언어를 동적 타입(Dynamically Typed)언어라고 한다.
다음은 여덟 가지 자료형이다.
각 자료형의 보다 세세한 설명은 차후 챕터에서 다룬다.
let n = 123;
n = 12.3;
숫자형(number type)은 정수 및 부동소수점 숫자(floating point number)를 나타낸다.
내부 표현 방식(?) 때문에 자바스크립트에서는 (2의 53제곱 - 1)(9007199254740991)보다 큰 값 혹은 -(2의 53제곱 - 1)보다 작은 정수는 '숫자형'을 사용해 나타낼 수 없다.
대부분의 상황에서는 이런 큰 숫자를 사용할 일이 없어 문제가 되지 않는다. 하지만 암호 관련 작업 등 큰 숫자 혹은 높은 정밀도가 요구되는 상황이라면 BigInt형으로 처리한다.
BigInt형은 길이에 상관없이 정수를 나타낼 수 있는 자료형이며 정수 리터럴 끝에 n을 붙이면 만들 수 있다.. 표준으로 채택된지 얼마 되지 않았다.
let bi = 1234567890123456789012345678901234567890n;
String이라고 하면 문자열이다. '열'은 집합을 의미한다. 특정 언어에서는 글자형(char, character)을 사용하여 이와 대조되는 단수의 글자를 특정한다. 하지만 자바스크립트에 글자형은 없다.
자바스크립트에선 문자열(String)을 따옴표로 묶는다.
let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed another ${str}`;
따옴표는 세 종류가 있다.
기본은 큰따옴표와 작은따옴표이며, 자바스크립트에서는 둘의 차이를 두지 않는다(하지만 큰따옴표는 큰따옴표로, 작은따옴표는 작은따옴표로 닫아야 한다).
let str = "Hello";
let str2 = 'Single quotes are ok too';
//역 따옴표(백틱, backtick)
let phrase = `can embed another ${str}`;
불린형(논리 타입)은 true와 false 두 가지 값 밖에 없는 자료형이다.
true는 긍정, 참을 나타내고 false는 부정, 거짓을 나타낸다.
alert(1 + 1 = 2) // alert창에 true가 표시됨
alert(3 + 3 = 10) // alert창에 false가 표시됨
null 값은 다른 자료형에 속하지 않고 오직 null 값만 포함하는 별도의 자료형을 만든다.
자바스크립트의 null은 다른 언어의 null과 성격이 다르다. 다른 언어에선 '존재하지 않는 객체에 대한 참조' 또는 '널 포인터(null pointer)'를 나타낼 때 사용한다.
반면 자바스크립트에선 null을 '존재하지 않는(nothing)' 값, '빈(empty)' 값, '알 수 없는(unknown)' 값을 나타낸다.
let age = null; // age를 알 수 없거나 값이 비어있음을 나타낸다.
null 값과 마찬가지로 자신만의 자료형을 형성한다.
'선언된 변수에 값이 할당되지 않은 상태'를 나타낼 때 사용한다.
let age; //변수 선언O, 값 할당X
alert(age); // 'undefined' 출력
age = 20; // 변수에 값 할당
alert(age); // 20 출력
undefined 자체를 할당할 수도 있다.
age = undefined;
객체(object)형은 특수한 자료형이다.
다른 자료형은 문자열이든 숫자든 한 가지만 표현할 수 있기 때문에 원시(primitive) 자료형이라 부른다. 반면 객체형은 데이터 컬렉션이나 복잡한 개체(entity)를 표현할 수 있다.
심볼(symbol)형은 객체의 고유한 식별자(unique identifier)를 만들 때 사용된다.
typeof 연산자는 인수의 자료형을 반환한다. 자료형을 구분하여 처리하거나 변수의 자료형을 빠르게 알아낼 때 유용하다.
typeof 연산자는 두 가지 형태의 문법을 지원한다.
연산자: typeof x
함수: typeof(x)
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" - Math는 수학 연산을 제공하는 내장 객체이므로 'object'가 출력됨
typeof null // "object" - null은 '값'이며 객체가 아니다. 하지만 하위 호환성을 유지하기 위해 이런 오류를 수정하지 않고 유지하고 있다.
typeof alert // "function" - alert은 함수이기에 'function'을 출력하나, function이라는 자료형은 없다. 마찬가지로 하위 호환성을 유지하기 위해 남겨두었다.