From da78a9e329e272dedb2400b79a3bdeebff387d47 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:17 -0500 Subject: initial commit --- .../reference/global_objects/error/index.html | 240 +++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 files/ko/web/javascript/reference/global_objects/error/index.html (limited to 'files/ko/web/javascript/reference/global_objects/error/index.html') diff --git a/files/ko/web/javascript/reference/global_objects/error/index.html b/files/ko/web/javascript/reference/global_objects/error/index.html new file mode 100644 index 0000000000..986cb5afa0 --- /dev/null +++ b/files/ko/web/javascript/reference/global_objects/error/index.html @@ -0,0 +1,240 @@ +--- +title: Error +slug: Web/JavaScript/Reference/Global_Objects/Error +tags: + - Error + - JavaScript + - Reference +translation_of: Web/JavaScript/Reference/Global_Objects/Error +--- +
{{JSRef}}
+ +

Error 생성자는 오류 객체를 생성합니다. Error 객체의 인스턴스는 런타임 오류가 발생했을 때 던져집니다. Error 객체를 사용자 지정 예외의 기반 객체로 사용할 수도 있습니다.

+ +

구문

+ +
new Error([message[, fileName[, lineNumber]]])
+ +

매개변수

+ +
+
message {{optional_inline}}
+
사람이 읽을 수 있는, 오류에 대한 설명.
+
fileName {{optional_inline}} {{non-standard_inline}}
+
생성할 Error 객체의 fileName 속성 값. 기본값은 Error 생성자를 호출한 코드를 포함하고 있는 파일의 이름입니다.
+
lineNumber {{optional_inline}} {{non-standard_inline}}
+
생성할 Error 객체의 lineNumber 속성 값. 기본값은 Error 생성자 호출을 포함한 줄 번호입니다.
+
+ +

설명

+ +

런타임 오류는 새로운 Error 객체를 생성하고 던집니다.

+ +

이 페이지는 Error 오브젝트 자체와, 생성자 함수로서의 사용처를 다룹니다. Error 인스턴스가 상속하는 속성과 메서드는 {{jsxref("Error.prototype")}}을 참고하세요.

+ +

함수로 사용

+ +

Error를 {{jsxref("Operators/new", "new")}} 없이 함수로 사용하면 Error 객체를 반환합니다. 즉 Error를 직접 호출해도 인스턴스를 만드는 것과 동일한 결과를 얻을 수 있습니다.

+ +
// 이렇게 호출하는 것과
+const x = Error('I was created using a function call!');
+​​​​// 이렇게 사용하는게 동일
+const y = new Error('I was constructed via the "new" keyword!');
+
+ +

오류 유형

+ +

JavaScript에는 일반적인 Error 생성자 외에도 7개의 중요 오류 생성자가 존재합니다. 클라이언트측 예외에 대해서는 제어 흐름과 에러 처리를 참고하세요.

+ +
+
{{jsxref("EvalError")}}
+
전역 함수 {{jsxref("eval", "eval()")}}에서 발생하는 오류의 인스턴스를 생성합니다.
+
{{jsxref("InternalError")}} {{non-standard_inline}}
+
JavaScript 엔진의 내부에서 오류가 발생했음을 나타내는 오류 인스턴스를 생성합니다.
+
{{jsxref("RangeError")}}
+
숫자 변수나 매개변수가 유효한 범위를 벗어났음을 나타내는 오류 인스턴스를 생성합니다.
+
{{jsxref("ReferenceError")}}
+
잘못된 참조를 했음을 나타내는 오류 인스턴스를 생성합니다.
+
{{jsxref("SyntaxError")}}
+
{{jsxref("eval", "eval()")}}이 코드를 분석하는 중 잘못된 구문을 만났음을 나타내는 오류 인스턴스를 생성합니다.
+
{{jsxref("TypeError")}}
+
변수나 매개변수가 유효한 자료형이 아님을 나타내는 오류 인스턴스를 생성합니다.
+
{{jsxref("URIError")}}
+
{{jsxref("encodeURI", "encodeURI()")}}나 {{jsxref("decodeURI", "decodeURl()")}} 함수에 부적절한 매개변수를 제공했을 때 발생하는 오류의 인스턴스를 생성합니다.
+
+ +

속성

+ +
+
{{jsxref("Error.prototype")}}
+
Error 인스턴스에 속성을 추가할 수 있습니다.
+
+ +

메서드

+ +

전역 Error 객체는 자신의 메서드를 가지지 않습니다. 그러나 프로토타입 체인을 통해 일부 메서드를 상속받습니다.

+ +

Error 인스턴스

+ +
{{page('ko/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', '설명')}}
+ +

속성

+ +
{{page('ko/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', '속성')}}
+ +

메서드

+ +
{{page('ko/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', '메서드')}}
+ +

예제

+ +

일반적인 오류 던지기

+ +

Error 객체를 생성한 후엔 대개 {{jsxref("Statements/throw", "throw")}} 키워드를 이용해 던집니다. {{jsxref("Statements/try...catch", "try...catch")}} 구문을 이용하여 오류를 처리할 수 있습니다.

+ +
try {
+  throw new Error("이런!");
+} catch (e) {
+  alert(e.name + ": " + e.message);
+}
+
+ +

특정 오류 처리하기

+ +

this should probably be removed오류의 {{jsxref("Object.prototype.constructor", "constructor")}} 속성을 판별해 특정 오류에 대해서만 처리를 할 수 있습니다. 현대적인 JavaScript 엔진의 코드를 작성한다면 {{jsxref("Operators/instanceof", "instanceof")}} 키워드를 이용할 수도 있습니다.

+ +
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?"를 방문해 심도 있는 논의를 읽어보세요.

+ +

ES6 사용자 정의 오류 클래스

+ +
+

Babel 버전 7 미만으로 사용자 정의 오류 클래스를 처리하려면 {{jsxref("Object.defineProperty()")}} 메서드를 사용해 정의해야만 합니다. 그렇지 않으면 오래된 Babel 및 다른 트랜스파일러가 추가 설정 없이 코드를 처리할 수 없습니다.

+
+ +
+

ES2015 클래스를 사용할 때, 일부 브라우저는 CustomError 생성자를 스택 트레이스에 포함합니다.

+
+ +
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 생성자를 스택 트레이스에 포함합니다.

+
+ +
function CustomError(foo, message, fileName, lineNumber) {
+  var instance = new Error(message, fileName, lineNumber);
+  instance.foo = foo;
+  Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
+  if (Error.captureStackTrace) {
+    Error.captureStackTrace(instance, CustomError);
+  }
+  return instance;
+}
+
+CustomError.prototype = Object.create(Error.prototype, {
+  constructor: {
+    value: Error,
+    enumerable: false,
+    writable: true,
+    configurable: true
+  }
+});
+
+if (Object.setPrototypeOf){
+  Object.setPrototypeOf(CustomError, Error);
+} else {
+  CustomError.__proto__ = Error;
+}
+
+
+try {
+  throw new CustomError('baz', 'bazMessage');
+} catch(e){
+  console.log(e.foo); //baz
+  console.log(e.message) ;//bazMessage
+}
+
+ +

명세

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES1')}}{{Spec2('ES1')}}Initial definition. Implemented in JavaScript 1.1.
{{SpecName('ES5.1', '#sec-15.11', 'Error')}}{{Spec2('ES5.1')}} 
{{SpecName('ES2015', '#sec-error-objects', 'Error')}}{{Spec2('ES2015')}} 
{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}{{Spec2('ESDraft')}} 
+ +

브라우저 호환성

+ + + +

{{Compat("javascript.builtins.Error")}}

+ +

같이 보기

+ + -- cgit v1.2.3-54-g00ecf