Posts Javascript Error 객체를 살펴보자.
Post
Cancel

Javascript Error 객체를 살펴보자.

Javascript Error 객체를 살펴보자. thumbnail

Javascript Error 객체를 살펴보자.

Javascript Error 객체는 런타임 오류가 발생했을 때 던져진다. 목적에 따라 커스텀하게 에러를 생성할 수도 있다.

Error 타입

일반적인 Error 생성자 외에 아래와 같이 몇가지 에러 타입이 존재한다.

  • EvalError - 전역함수 eval()에서 발생하는 오류
  • RangeError - 숫자/매개변수의 범위가 유효하지 않은 경우에 해당 에러가 생성된다.
  • ReferenceError - 잘못된 참조를 알리는 에러이다.
  • SyntaxError - 문법적인 오류가 발생할 때 생성되는 에러다.(은근 제일 많이 보이는…)
  • TypeError - 자료형이 올바르지 않은 경우에 생성되는 에러다.
  • URIError - encodeURI()나 decodeURI()에 잘못된 변수를 전달했을 때 발생한다.
  • AggregaetError - ES12 관련 포스팅에서 언급했다시피 새로 추가된 Error 객체로, 여러 개의 에러가 발생했을 때 생성된다.
  • InternalError - Javascript 내부 오류가 발생했을 때 생성된다.

에러를 던져보자.

에러를 던질 때는 throw 명령어를 통해 던지는데, try…catch 구문에서 catch 부분에 이 에러를 처리할 수 있다.

1
2
3
4
5
try {
    throw new Error('에러를 던집니다.');
} catch (e) {
    console.error(e); // 에러를 던집니다.
}

Error Properties

Error 객체에서 다양한 프로퍼티들이 있지만 비표준인 프로퍼티를 제외한 message, name 프로퍼티를 살펴보자.

Error.prototype.message

오류에 대한 부가설명을 보여준다. Error 생성자에 넣는다. 기본적으로는 빈 문자열이다.

1
2
3
const err = new Error('에러에 대한 설명을 합니다.');
console.error(err.message); // '에러에 대한 설명을 합니다.'
throw err;

Error.prototype.name

오류 타입을 명시한다.

1
2
3
4
// 예시
const err = new Error('$(...).tooltip is not a function');
err.name = 'TypeError';
throw err;

Error Methods

Error.prototype.toString() 으로 name, message 를 문자열로 변환해서 Error에 대한 정보를 보여줄 수 있다.

1
2
3
4
5
// 예시
const err = new Error('$(...).tooltip is not a function');
err.name = 'TypeError';
console.error(err.toString()); // TypeError: (...).tooltip is not a function
throw err;

Custom Error

로그인 API를 요청할 때 사용할 Login 할 때만 쓰일 CustomError를 만들어보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CustomLoginError extends Error {
    constructor(type, err) {
        switch(type) {
            case 'network':
                console.error('network error', err);
                break;
            case 'login fail':
                console.log('wrong email or password');
                break;
            default:
                console.error(err);
        }
    }
}

로그인 API를 요청하면서 위의 CustomError를 발생시켜보자.

1
2
3
4
5
6
7
8
9
10
try {
     const result = async () => await login(); // login() 에서는 로그인 성공여부에 따라 boolean을 반환한다고 가정.
     if (result) {
         console.log('login success');
     } else {
         throw new CustomLoginError('login fail', 'wrong id or password');
     }
} catch (e) {
    throw new CustomLoginError('network', e);
}

이런식으로 Javascript 에서 제공하는 기본 Error 타입 외에 별도로 Custom 하게 만들어서 Error를 던져줄 수도 있다.

참고

This post is licensed under CC BY 4.0 by the author.

ECMA 2021(es12)를 살펴보자.

코어자바스크립트-1.데이터 타입에 대한 정리