에러가 발생하면 스크립트는 즉시 중단되고, 콘솔에 에러가 출력된다.

스크립트가 중단되는 것을 방지하기 위해 try…catch 문법을 사용한다.

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));
});

try…catch…finally 문

finally 절은 무언가를 실행하고, 실행 결과에 상관없이 실행을 완료하고 싶을 경우에 사용된다.

다음의 구문은 두 가지 경로로 실행된다.

  1. 에러가 없는 경우: try→ finally
  2. 에러가 있는 경우: try→ catch → 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 블록에 이 객체를 인수로 전달한다.

내장 에러 전체와 에러 객체는 다음의 프로퍼티를 가진다.