자바스크립트에서 값은 항상 문자열이나 숫자형 같은 특정한 자료형에 속한다. 자바스크립트에는 여덟가지 기본 자료형이 있다.
자바스크립트의 변수는 어떤 순간에는 문자열일 수도, 다른 순간에는 숫자가 될 수도 있다. 이처럼 자료의 타입은 있지만, 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어를 ‘동적 타입'언어라고 부른다.
숫자형은 정수 및 부동소수점 숫자를 나타낸다.
일반적인 숫자 외에 Infinity
, -Infinity
, NaN
같은 특수 숫자 값도 숫자형에 포함된다.
alert( 1 / 0 ); // Infinity
alert(Infinity); // Infinity
alert(Infinity-Infinity); // NaN
NaN은 Not a Number 라는 뜻으로, 계산 중 에러가 발생했음을 나타내주는 값이다. 부정확하거나 정의되지 않은 연산을 사용하면 계산 중 에러가 발생하는데 이때 NaN이 반환된다.
alert("숫자가 아님" / 2); // NaN, 문자열을 숫자로 나누면 오류가 발생
NaN은 어떤 추가 연산을 해도 NaN 을 반환한다.
alert("숫자가 아님" / 2+5); // NaN
자바스크립트에서는 0으로 나누거나 숫자가 아닌 문자열을 숫자로 취급하는 연산을 해도 에러를 내고 종료되지 않으며, 대신 NaN을 반환하며 연산이 종료된다.
자바스크립트에서는 (9007199254740991) 보다 큰 값 혹은 보다 작은 정수는 숫자형으로 나타낼 수 없다.
암호 관련 작업같이 아주 큰 숫자가 필요하거나 아주 높은 정밀도로 작업할 때는 문제가 될 수 있다. BigInt 는 표준으로 채택된지 얼마 안 된 자료형으로, 길이에 상관없이 정수를 나타낼 수 있다. 정수 표현 끝에 n을 붙이면 만들 수 있다.
const bigInt = 1234567890123456789012345678901234567890n;
문자열은 따옴표로 묶는다.
"Hello"
'Hello'
큰따옴표와 작은따옴표는 ‘기본적인'따옴표로, 자바스크립트에서는 둘에 차이를 두지 않는다!
역 따옴표의 경우 ${변수 or 표현식}
처럼 문자열 중간에 변수나 표현식을 쉽게 넣을 수 있다.
불린형(논리 타입)에는 true 와 false 두 가지 값밖에 없다.
긍정/부정을 나타내는 값을 저장할 때 사용한다.
let nameFieldChecked = true; // 네, name field가 확인되었습니다(checked).
let ageFieldChecked = false; // 아니요, age field를 확인하지 않았습니다(not checked)
비교 결과를 저장할 때도 사용한다.
let isGreater = 4 > 1;
alert( isGreater ); // true (비교 결과: "yes")
null은 어느 자료형에도 속하지 않으며, 오로지 null 값만을 포함하는 별도의 자료형을 만든다.
다른 언어에서 null 은 ‘존재하지 않는 객체에 대한 참조’나 ‘널 포인터'를 나타낼 때 사용한다. 하지만 자바스크립트에선 ‘존재하지 않는’값, ‘비어 있는' 값’, ‘알 수 없는' 값을 나타내는 데 사용한다.
let age = null;
은 나이(age)
를 알 수 없거나 그 값이 비어있음을 보여준다.
null 과 마찬가지로 자신만의 자료형을 형성한다.
undefined 는 ‘값이 할당되지 않은 상태'를 나타낼 때 사용한다.
변수를 선언했지만, 값을 할당하지 않았다면 해당 변수에 undefined 가 자동으로 할당된다.
let age;
alert(age); // 'undefined'가 출력
명시적으로 undefined 를 할당하는 것도 가능하지만, 권장되지는 않는다.
변수가 ‘비어있거나' ‘알수 없는' 상태임을 나타낼 때는 null 을 사용하는 것이 좋다. undefined 는 값이 할당되지 않는 변수의 초기값을 나타내기 위한 예약어로 남겨두자.
객체형은 특수한 자료형으로, 데이터 컬렉션이나 복잡한 개체를 표현할 수 있다.
심볼형은 객체의 고유한 식별자를 만들 때 사용한다.
인수의 자료형을 반환하는 함수이다. 자료형에 따라 처리 방식을 다르게 하고 싶거나 변수의 자료형을 빠르게 알아내고 싶을 때 사용한다.
다음과 같이 두 가지 형태의 문법을 지원한다.
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
typeof null // "object" (2)
typeof alert // "function" (3)