Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015년 7월.
typeof 연산자는 피연산자의 평가 전 자료형을 나타내는 문자열을 반환합니다.
자료형을 가져올 객체 또는 원시값을 나타내는 표현식.
typeof가 반환할 수 있는 값을 아래 표에서 볼 수 있습니다. 자료형과 원시값에 대한 자세한 정보는 JavaScript 자료형과 자료구조 페이지를 참고하세요.
| Undefined | "undefined" |
| Null | "object" (아래 참고) |
| Boolean | "boolean" |
| Number | "number" |
| BigInt | "bigint" |
| String | "string" |
| Symbol | "symbol" |
| Function 객체 (ECMA-262 표현으로는 [[Call]]을 구현하는 객체) | "function" |
| 다른 모든 객체 | "object" |
이 목록은 가능한 모든 값을 포함합니다. 명세를 준수하는 엔진에서 이외의 값이 생성된 사례는 현재까지도 보고되지 않았습니다.
JavaScript를 처음 구현할 때, JavaScript 값은 타입 태그와 값으로 표시되었습니다. 객체의 타입 태그는 0이었습니다. null은 Null pointer(대부분의 플랫폼에서 0x00)로 표시되었습니다. 그 결과 null은 타입 태그로 0을 가지며, 따라서 typeof는 object를 반환합니다. (참고 문서)
ECMAScript에 수정이 제안(opt-in을 통해)되었으나 거절되었습니다. 제안된 것은 다음과 같습니다. typeof null === 'null'.
new와 함께 호출된 모든 생성자 함수는 비원시값("object" 또는 "function")을 반환합니다. 대부분은 객체를 반환하지만, 예외적으로 Function은 함수를 반환합니다.
typeof 연산자는 덧셈(+) 같은 이항 연산자보다 더 높은 연산자 우선순위 를 가집니다. 따라서 덧셈 결과의 타입을 평가하려면 괄호가 필요합니다.
typeof는 제공된 피연산자에 대해 항상 문자열을 반환하는 것이 보장됩니다. 선언되지 않은 식별자라도 typeof는 오류를 던지지 않고 "undefined"를 반환합니다.
그러나 동일한 블록 내에서 선언 위치 이전의 렉시컬 선언(let const, class )에 typeof를 사용하면 ReferenceError를 던집니다. 블록 범위 변수는 초기화가 처리되기 전까지 블록 시작부터 일시적 사각지대(TDZ) 에 있기 때문에, 이 기간에 접근하면 오류가 발생합니다.
현재 모든 브라우저는 타입이 undefined인 비표준 호스트 객체 document.all 을 노출합니다.
document.all은 falsy 값이고 undefined 와 느슨한 동등을 가지지만, 실제로 undefined는 아닙니다. document.all의 타입이 "undefined"인 경우는 웹 호환성을 위한 원래 ECMAScript 표준의 "의도적인 위반(willful violation)"으로 웹 표준에 분류되어 있습니다.
typeof는 매우 유용하지만, 필요한 만큼 다재다능하지는 않습니다. 예를 들어, typeof []는 "object"이고, typeof new Date(), typeof /abc/도 마찬가지입니다.
더 구체적으로 타입을 확인하기 위해 여기에서는 사용자 정의 type(value) 함수를 제시합니다. 이 함수는 대부분 typeof의 동작을 모방하지만, 비원시값(즉, 객체와 함수)에 대해서는 가능한 경우 더 세분화된 타입 이름을 반환합니다.
존재하지 않을 수 있는 변수를 확인할 때는 ReferenceError가 발생하지 않도록 typeof nonExistentVar === "undefined"를 사용해야 합니다. 이 동작은 사용자 정의 코드로는 흉내낼 수 없습니다.
| ECMAScript® 2027 Language Specification # sec-typeof-operator |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025년 10월 9일 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.