JavaScript

JavaScript 타입(Types)

자바스크립트에서 타입은 데이터를 분별하고 처리하는 방법의 기반이 된다. 각 타입은 고유한 내부 특성을 가지고 있으며, 이러한 특성에 따라 자바스크립트 엔진은 변수의 사용과 연산 시 타입 강제 변환을 수행할 수 있다.

JavaScript 내장 타입

자바스크립트에는 여러 내장 타입이 있고 자바스크립트의 내장 타입은 크게 원시 타입과 객체 타입으로 구분된다. 원시 타입은 불변의 값이며, 객체 타입은 여러 개의 원시 타입 값이나 다른 객체를 포함할 수 있는 복합적인 구조이다.
분류
타입
원시타입
number
원시타입
string
원시타입
boolean
원시타입
undefined
원시타입
null
원시타입
symbol
객체타입
객체, 함수, 배열 등

원시 타입

  • number: 자바스크립트의 number 타입은 배정밀도 64비트 부동소수점 형식을 따르며, Infinity, Infinity, NaN 같은 특수 숫자 값을 포함한다.
  • string: 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합이다. 문자열은 불변의 값으로, 작은따옴표('), 큰따옴표("), 백틱(``)으로 텍스트를 감싸 표현한다.
  • boolean: 논리적인 값인 truefalse를 나타낸다.
  • undefined: 변수가 선언되었으나 값이 할당되지 않았을 때 사용되는 타입이다.
  • null: 변수에 값이 없음을 의도적으로 나타낼 때 사용되는 값이다.
  • symbol: ECMAScript 6에서 도입된 새로운 데이터 타입으로, 변경 불가능한 원시값이며 주로 객체 프로퍼티의 키로 사용된다.

객체 타입

  • 객체, 함수, 배열 등은 자바스크립트에서 객체 타입에 속한다. 객체 타입은 프로퍼티로 구성된 집합이며, 각 프로퍼티는 키와 값으로 구성된다. 함수도 객체의 한 종류로, 호출 가능한 특별한 객체다.

주의사항!

  • 템플릿 리터럴(``): 문자열을 표현하는 새로운 방식으로, 멀티라인 문자열이나 표현식 삽입 등 향상된 기능을 제공한다.
  • null과 undefined: null은 값이 없음을 명시적으로 표현하는 반면, undefined는 변수가 초기화되지 않았음을 나타낸다.
  • symbol 생성: Symbol 타입의 값은 Symbol() 함수를 호출하여 생성한다. 각 심볼 값은 유일하며, 객체의 고유한 식별자로 사용할 수 있다.

null

null 타입은 자바스크립트에서 특별하게 취급된다. typeof 연산자로 null 값을 확인하면 "object"라는 결과를 얻게 되는데, 이는 초기 자바스크립트 구현의 버그에서 비롯된 것이다. 이 버그는 역사적인 이유로 인해 수정되지 않고 남아 있다.
typeof null === 'object'; // true
null은 "아무 것도 없음"을 의미하는 유일한 원시값이며, falsy한 값 중 하나다.

object - function

함수는 자바스크립트에서 특별한 객체 유형이다. typeof 연산자를 사용하여 함수를 확인하면 "function"이라는 결과를 얻는다. 이는 함수가 "호출 가능한 객체(callable object)"라는 사실을 반영한다.
typeof function a(){} === 'function'; // true
함수는 객체의 하위 타입에 속하지만, 최상위 레벨의 내장 타입은 아니다.

object - array

배열 역시 객체의 하위 타입이다. 배열은 순서가 있는 값들의 집합을 표현하는 데 사용된다. typeof 연산자로 배열을 확인하면 "object"라는 결과를 얻게 된다.
typeof [1,2,3] === 'object'; // true
배열의 타입이 객체임을 확인할 수 있다.

값에는 타입이 있지만, 변수엔 타입이 없다

자바스크립트는 동적 타입 언어로, 변수에 타입을 강제하지 않는다. 이는 변수가 다양한 타입의 값을 할당받을 수 있음을 의미한다.

값이 없는 것과 선언되지 않은 것

자바스크립트에서 "값이 없음"과 "선언되지 않음"은 다르지만, 둘 다 typeof 연산의 결과로 "undefined"를 반환한다.
  • 값이 없다 (undefined): 변수가 선언되었으나 아무런 값도 할당받지 않았을 때이다.
  • 선언되지 않았다 (undefined): 해당 스코프 내에서 변수가 선언조차 되지 않았을 때이다.