• 예외 : 예기치 못한 상황

    → 예측하고 대비하면 프로그램 멈출 걱정이 없다!

  • JS에서 염두해두고 있는 예외 상황들

    • SyntaxError - 문법 등 자바스크립트 파싱 중 에러
    • TypeError - 사용할 수 없는 변수를 썻을 경우
    • ReferenceError - 허용되지 않은 참조 사용
    • RangeError - 허용 숫자 범위 초과
    • EvalError - eval()의 잘못된 활용
    • URIError - encodeURI() 혹은 decodeURI()의 잘못된 활용
    • 사용자 정의 에러
    • …
  • Try - catch - finally 문법

    try {
    	//일단 이 부분 실행 -> 예외상황이 생길 수 있는 코드
    }
    catch{
    	//에러 생기면 이 부분 실행 //예외 상황 = 에러 객체 생성
    }
    finally{
    	//마침내 이 부분 실행	//마지막으로 무조건 실행될 코드
    }
    
    • 예외(에러)가 생기면 catch부분

    • 예외(에러)가 생기지 않으면 finally부분

    • 예시)

    try {
      console.log("try에 있는 문장");
      const result = document.getElementById(id); //있지도 않음
    }
    catch(e){
      console.log("catch에 있는 문장");
      //console.log(e); //에러 정보 확인
      //console.log(e.name); //에러의 이름정보만 확인
      //console.log(e.message); //에러객체가 발생시킨 메시지
      //console.log(e.stack); //자세한 에러에 대한 설명
    }
    finally{
      console.log("finally에 있는 문장");
    }
    
    • 참고로 catch부분에서 에러의 이름을 토대로 예외처리하면 효율적일 것이다.
    • if(e.name ===”에러이름”) //에러처리코드
  • 사용자 정의 예외

    • throw 문법 : 디버깅을 하거나 예외를 발생시킬 경우 사용

      try {
      	console.log("try에 있는 문장");
      	throw new Error("사용자가 정의한 에러가 발생했다!"); //Error 발생
      	throw "에러가 발생했다!"; //문자열만 출력되게끔 하는 것 //에러 객체 자체가 문자열이 됨
      }
      catch(e){
      	console.log("catch에 있는 문장");
        console.log(e); //에러 정보 확인
        //console.log(e.name); //에러의 이름정보만 확인
        //console.log(e.message); //에러객체가 발생시킨 메시지
        //console.log(e.stack); //자세한 에러에 대한 설명
      }
      finally{
        console.log("finally에 있는 문장");
      }