TIL/JS

에러 핸들링(3)_Error 속성 바꾸기

yyeon111 2023. 4. 1. 01:05

에러에는 name 앞에 붙는 표시, name, message, casue를 지정 할 수 있다.

 

⚪ 표식 바꾸기

name 앞에 붙는 표식은 Error의 인스턴스를 만들 때 프로퍼티로 들어가지 않는다.

try...catch문에서 첫번 째 인자로 표식을 줄 수 있다.

직접 Error 생성자 함수를 통해 인스턴스를 만들 때는 표식을 지정 할 수 없다.

 

⚪ name 바꾸기

Error객체의 name의 default는 Error이다.

이 name은 Error의 static property로서 들어가 있다.

또한, Error Type에 따른 static property도 지정이 되어있어, 해당 Type의 에러가 발생 했을 경우, 이름이 Type으로 바뀐다.

이는 class에서 배웠듯이 부모 class가 static을 가지고 있더라도 자식이 static이 있을 경우 해당 property를 변경 할 수 있기 때문이다.

또한, static이더라도, 새롭게 인스턴스가 만들어지면 property를 새롭게 지정해서 값을 변경 할 수 있다.

때문에, name의 property를 새롭게 지정하면 Error의 name을 변경 할 수 있다.

//try..catch에서 error의 name지정
try {
  (123).split('');
} catch (e) {
  e.name = '이름';
  console.error('표식', e);
}

console.error()

const error = new Error('메세지');
error.name = '이름';
console.error(error);

console.error()

⚪ cause 지정

Error의 객체를 생성 할 때, 두번째 인자를 객체로서 전달하여 원인을 지정 할 수 있다.

하지만 따로 name과 같이 property를 지정 해 줄 수도 있다.

 

💡인자로 전달 할 때와 프로퍼티로 지정 할 때의 차이

결론은 둘다 같이 프로퍼티로서 저장이된다.

다만 console.dir로 확인 했을 때, 고의로 지정했는지 error에서 지원하는 property중 하나로 작성 했는지에 대한 차이다.

기능적으로 돌아가는데에는 차이가 없다.

name은 고의로 지정해준 것으로 표시가된다.

const error = new Error('message', {cause: 'unknown'});
error.name = 'name';
console.dir(error);

const error2 = new Error('message');
error2.cause = 'unknown';
error2.name = 'name';
console.dir(error2);

'TIL > JS' 카테고리의 다른 글

var  (0) 2023.04.02
에러 핸들링(4)_에러타입  (0) 2023.04.01
에러 핸들링(2)_try catch_finally  (0) 2023.04.01
에러 핸들링(1)  (0) 2023.03.31
generator  (0) 2023.03.29