---
title: Error
slug: Web/JavaScript/Reference/Global_Objects/Error
tags:
- Error
- JavaScript
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Error
browser-compat: javascript.builtins.Error
---
{{JSRef}}
`Error` 객체는 런타임 오류가 발생했을 때 던져집니다.
`Error` 객체를 사용자 지정 예외의 기반 객체로 사용할 수도 있습니다.
아래 표준 내장 오류 유형을 참고하세요.
## 설명
런타임 오류는 새로운 `Error` 객체를 생성하고 던집니다.
### 오류 유형
JavaScript에는 일반적인 `Error` 생성자 외에도 여러 개의 중요 오류
생성자가 존재합니다. 클라이언트측 예외에 대해서는
[제어 흐름과 에러 처리](/ko/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#예외처리문)를 참고하세요.
- {{jsxref("EvalError")}}
- : 전역 함수 {{jsxref("eval", "eval()")}}에서 발생하는 오류의 인스턴스를
생성합니다.
- {{jsxref("RangeError")}}
- : 숫자 변수나 매개변수가 유효한 범위를 벗어났음을 나타내는 오류 인스턴스를
생성합니다.
- {{jsxref("ReferenceError")}}
- : 잘못된 참조를 했음을 나타내는 오류 인스턴스를 생성합니다.
- {{jsxref("SyntaxError")}}
- : {{jsxref("eval", "eval()")}}이 코드를 분석하는 중 잘못된 구문을 만났음을
나타내는 오류 인스턴스를 생성합니다.
- {{jsxref("TypeError")}}
- : 변수나 매개변수가 유효한 자료형이 아님을 나타내는 오류 인스턴스를
생성합니다.
- {{jsxref("URIError")}}
- : {{jsxref("encodeURI", "encodeURI()")}}나 {{jsxref("decodeURI",
"decodeURl()")}} 함수에 부적절한 매개변수를 제공했을 때 발생하는 오류의
인스턴스를 생성합니다.
- {{JSxRef("AggregateError")}}
- : 하나의 동작이 여러 개의 오류 발생시키는 경우(예:
{{JSxRef("Promise.any()")}}) 여러 오류를 하나의 오류로 감싸는 인스턴스를
만듭니다.
- {{jsxref("InternalError")}} {{non-standard_inline}}
- : JavaScript 엔진의 내부에서 오류가 발생했음을 나타내는 오류 인스턴스를
생성합니다.
## 생성자
- {{jsxref("Error/Error", "Error()")}}
- : 새로운 `Error` 객체를 만듭니다.
## 정적 메서드
- {{JSxRef("Error.captureStackTrace()")}}
- : 오류 인스턴스의 {{JSxRef("Error.prototype.stack", "stack")}} 속성을 만드는
비표준 **V8** 함수
## 인스턴스 속성
- {{jsxref("Error.prototype.message")}}
- : 오류 메시지
- {{jsxref("Error.prototype.name")}}
- : 오류 이름
- {{jsxref("Error.prototype.description")}}
- : 오류를 설명하기 위한 비표준 마이크로소프트 속성.
{{jsxref("Error.prototype.message", "message")}}와 비슷합니다.
- {{jsxref("Error.prototype.number")}}
- : 오류 번호를 위한 비표준 마이크로소프트 속성
- {{jsxref("Error.prototype.fileName")}}
- : 해당 오류를 발생시킨 파일의 경로를 표시하기 위한 비표준 모질라 속성
- {{jsxref("Error.prototype.lineNumber")}}
- : 해당 오류를 발생시킨 파일의 줄 번호를 표시하기 위한 비표준 모질라 속성
- {{jsxref("Error.prototype.columnNumber")}}
- : 해당 오류를 발생시킨 파일의 칸 번호를 표시하기 위한 비표준 모질라 속성
- {{jsxref("Error.prototype.stack")}}
- : 스택 추적을 위한 비표준 모질라 속성
## 인스턴스 메서드
- {{jsxref("Error.prototype.toString()")}}
- : 명시된 객체를 표현하기 위한 문자열을 반환합니다.
{{jsxref("Object.prototype.toString()")}} 메서드를 오버라이드합니다..
## 예제
### 일반적인 오류 던지기
`Error` 객체를 생성한 후엔 대개 {{jsxref("Statements/throw",
"throw")}} 키워드를 이용해 던집니다. {{jsxref("Statements/try...catch",
"try...catch")}} 구문을 이용하여 오류를 처리할 수 있습니다.
```js
try {
throw new Error("이런!");
} catch (e) {
alert(e.name + ": " + e.message);
}
```
### 특정 오류 처리하기
오류의 {{jsxref("Object.prototype.constructor", "constructor")}} 속성을 이용해
유형을 판별, 특정 오류만 처리할 수 있습니다. 만약 최신 Javascript 엔진에서
동작하는 코드를 작성한다면 {{jsxref("Operators/instanceof",
"instanceof")}} 키워드를 이용할 수도 있습니다.
```js
try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
alert(e.name + ": " + e.message);
} else if (e instanceof RangeError) {
alert(e.name + ": " + e.message);
}
// ... etc
}
```
### 사용자 정의 에러 타입
`throw new MyError()` 이후 `instanceof MyError`로 직접
만든 오류를 판별할 수 있도록 `Error`의 파생 오류 정의를
고려해보세요. 더 깔끔하고 일관적인 오류 처리 코드를 작성할 수
있습니다. StackOverflow의 ["What's a good way to extend Error in JavaScript?"](https://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript)를 방문해 심도 있는 논의를 읽어보세요.
#### ES6 사용자 정의 오류 클래스
> **경고:** Babel 버전 7 미만으로 사용자 정의 오류 클래스를 처리하려면 {{jsxref("Object.defineProperty()")}} 메서드를 사용해 정의해야만 합니다. 그렇지 않으면 오래된 Babel 및 다른 트랜스파일러가 [추가 설정](https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend) 없이 코드를 처리할 수 없습니다.
> **참고:** ES2015 클래스를 사용할 때, 일부 브라우저는 CustomError
생성자를 스택 트레이스에 포함합니다.
```js
class CustomError extends Error {
constructor(foo = 'bar', ...params) {
// Pass remaining arguments (including vendor specific ones) to parent constructor
super(...params);
// Maintains proper stack trace for where our error was thrown (only available on V8)
if (Error.captureStackTrace) {
Error.captureStackTrace(this, CustomError);
}
// Custom debugging information
this.foo = foo;
this.date = new Date();
}
}
try {
throw new CustomError('baz', 'bazMessage');
} catch(e){
console.log(e.foo); //baz
console.log(e.message); //bazMessage
console.log(e.stack); //stacktrace
}
```
#### ES5 사용자 정의 오류 객체
프로토타입 선언을 사용하면 모든 브라우저가 CustomError
생성자를
스택 트레이스에 포함합니다.