에러가 발생하면 스크립트는 즉시 중단되고, 콘솔에 에러가 출력된다.
스크립트가 중단되는 것을 방지하기 위해 try…catch 문법을 사용한다.
try{
// ...
} catch (err) {
// error handling
}
const arr = ['ABC', '가나다', 123, '123'];
function getLetterArray (str) {
// 인자로 어떤 타입의 값이 주어질지 모르는 상황
try {
return str.split('');
} catch (e) {
console.error('🛑 에러!!', e);
return [];
}
}
arr.forEach(i => {
console.log(getLetterArray(i));
});
finally 절은 무언가를 실행하고, 실행 결과에 상관없이 실행을 완료하고 싶을 경우에 사용된다.
다음의 구문은 두 가지 경로로 실행된다.
function connect () { console.log('☀️', '통신 연결'); }
function disconnect () { console.log('🌙', '통신 연결 해제'); }
function sendArray (arr) { console.log('전송', arr); }
function sendStringAsArray (str) {
connect();
try {
sendArray(str.split(''));
return true;
} catch (e) {
console.error('🛑 에러!!', e);
return false;
} finally {
// 💡 전송 성공 여부와 관계없이 연결은 끊어야 함
disconnect();
console.log('- - - - - - - -');
}
// ❓ 이곳에 넣는 것과 무엇이 다른가?
// 아래로 대체하여 실행해 볼 것
// disconnect();
// console.log('- - - - - - - -');
}
['ABC', '가나다', 123, '123'].forEach(i => {
console.log(
sendStringAsArray(i)
? '[성공]' : '[실패]', '\\n\\n'
);
});
try나 catch 문에 return이 있더라도 반드시 실행된다.
에러가 발생되면 자바스크립트는 에러 상세 내용이 담긴 객체를 생성한다. 그 후, catch 블록에 이 객체를 인수로 전달한다.
내장 에러 전체와 에러 객체는 다음의 프로퍼티를 가진다.
name
- 에러 이름