47장 에러 처리
에러 처리의 필요성
- 발생한 에러를 방치하면 프로그램은 강제 종료됨
- try catch 문을 사용해 대응하면 강제 종료되지 않고 실행 시킬수 있음.
- 직접적인 에러를 발생하지는 않는 예외적인 상황이 발생할 수도 있음. 대응하지 않으면 에러로 이어질 가능성이 큼.
47-03
// DOM에 button 요소가 존재하지 않으면 querySelector 메서드는 에러를 발생시키지 않고 null을 반환한다.
const $button = document.querySelector('button'); // null
$button.classList.add('disabled');
// TypeError: Cannot read property 'classList' of null
- 에러가 발생하지 않는 코드를 작성하는 것이 이상적이지만 불가능함.
try … catch … finally 문
- 예외적인 상황이 발생하면 반환하는 값(null 또는 -1)을 if 문이나 단축 평가 또는 옵셔널 체이닝 연산자를 통해 확인해서 처리하는 방법
- 에러 처리 코드를 미리 등록해 두고 에러가 발생하면 에러 처리 코드로 점프하는 방법
- (try catch finally 문)
Error 객체
- Error 생성자 함수는 에러 객체를 생성함.
47-07
const error = new Error('invalid');
throw 문
- Error 생성자 함수로 에러 객체를 생성한다고 에러가 발생하는 것은 아님.
47-09
try {
// 에러 객체를 생성한다고 에러가 발생하는 것은 아니다.
new Error('something wrong');
} catch (error) {
console.log(error);
}
- 에러를 발생시키려면 try 코드 블록에서 throw 문으로 에러 객체를 던져야 한다.
47-10
try {
// 에러 객체를 던지면 catch 코드 블록이 실행되기 시작한다.
throw new Error('something wrong');
} catch (error) {
console.log(error);
}
에러의 전파
- 에러는 호출자(caller) 방향으로 전파됨.
- 즉 콜스택의 아래 방향으로 전파됨.
47-12
const foo = () => {
throw Error('foo에서 발생한 에러'); // ④
};
const bar = () => {
foo(); // ③
};
const baz = () => {
bar(); // ②
};
try {
baz(); // ①
} catch (err) {
console.error(err);
}
'JS' 카테고리의 다른 글
모던 자바스크립트 Deep Dive - Babel과 Webpack을 이용한 ES6+/ES.NEXT 개발 환경 구축 (0) | 2024.02.21 |
---|---|
모던 자바스크립트 Deep Dive - 모듈 (0) | 2024.02.20 |
모던 자바스크립트 Deep Dive - async/await (0) | 2024.02.17 |
모던 자바스크립트 Deep Dive - 프로미스 (0) | 2024.02.16 |
모던 자바스크립트 Deep Dive - REST API (0) | 2024.02.15 |
댓글