try ~catch문
try ~catch문은 실행할 코드블럭을 표시하고 예외(exception)가 발생할 경우의 응답을 결정합니다.
아래의 예시를 보면
정상적으로 동작했다면 normalFunction이 동작하고 try문을 진행하는 도중 error가 발생하면 existentFunction이 실행됩니다.
예를 들어
위 코드를 보게 되면 try문이 진행되던 도중 정의되지 않은 변수 a에 의해 error가 발생하고 이로 인해 try 쪽을 건너 뛰고 에러 발생이라는 console.log()가 실행된다.
try ~catch문의 특징
1. try ~catch문은 오직 런타임 에러에만 동작한다. 문법적 오류로 인한 에러의 경우 try ~catch문은 정상적으로 동작하지 않는다.
2. try ~catch문은 동기적으로 동작합니다. 즉, setTimeout처럼 스케줄된 코드에서 발생한 예외는 try ~catch문으로 잡아낼 수 없다. 이것이 무슨 뜻이냐면 setTimeout으로 시간이 지나간 후에 실행되는 코드에서 발생하는 에러는 try ~catch문으로 잡을 수 없다는 것이다.
에러 객체
try ~catch문에서 에러가 발생하면 그 에러에 대한 상세한 내용이 담긴 객체(catch()의 괄호 안의 인수)를 생성합니다.
이 에러 객체의 요소들은 대략적으로 아래와 같다.
1. name : 에러의 이름으로 예를 들어 정의되지 않은 변수에 의한 에러는 "ReferentceError"가 저장된다.
2. message : 에러의 상세 내용을 담고 있는 key
3. stack : 현재 호출 스택. 에러를 유발하는 중첩 호출들의 순서 정보를 가진 문자열로 디버깅에 사용됩니다.
throw 연산자
throw 연산자는 에러를 생성하는 연산자로 문법은
위와 같다.
에러 객체를 생성해주는 방법은 아래와 같다.
위코드가 실행되면 error 객체에는 name이 SyntaxError이고 massage가 "error message"라는 에러 객체가 저장된다.
try ~catch ~finally
finally를 쓰게 되면 try ~catch문 실행 이후에 에러의 발생 유무와 관계없이 finally문 안의 코드는 실행됩니다.
문법은 아래와 같습니다.
finally를 쓰는 경우 try ~catch문이 실행되어 그 코드를 빠져나가는 경우(ex. return으로 인한 종료)에도 동작하는 것이 특징입니다.
'TIL' 카테고리의 다른 글
프론트 엔드 1주 4일차 동기, 비동기 실행 (0) | 2023.03.16 |
---|---|
4. git, Template Literals (0) | 2023.03.16 |
2. Import와 Export (0) | 2023.03.16 |
프론트 엔드 1주 3일차 데이터 통신과 API, try ~ catch (2) | 2023.03.15 |
프론트 엔드 1주 2일차 - React의 useState 그리고 Import와 Export (0) | 2023.03.14 |