try - catch 문장

5398 단어 JavaScript
try-catch 문 구 는 자 바스 크 립 트 에서 이상 을 처리 하 는 표준 방식 이다.기본 문법 은 다음 과 같다.
try{ 
 //           
} catch(error){ 
 //           
} 
try 블록 에 있 는 모든 코드 에 오류 가 발생 하면 코드 실행 과정 을 즉시 종료 하고 이 어 실행 catch 블록 을 실행 합 니 다.이때 catch 블록 은 잘못된 정 보 를 포함 하 는 대상 을 받 습 니 다.이 잘못된 상 대 를 사용 하고 싶 지 않 더 라 도 이름 을 지어 야 한다.이 대상 에는 오류 메시지 가 저 장 된 message 속성 과 오류 형식 을 저장 하 는 name 속성 이 포함 되 어 있 습 니 다.
마지막 자구try-catch 문구 에서 선택 할 수 있 지만 finally 자 구 를 사용 하면 코드 는 어떻게 든 실 행 됩 니 다.다시 말 하면 try 문장의 코드 는 모두 정상적으로 실행 되 고 finally 자 구 는 실 행 됩 니 다.오류 로 인해 catch 문 구 를 실 행 했 을 경우 finally 자 구 는 그대로 실 행 될 것 이다.코드 에 finally 자구 가 포함 되 어 있 으 면 try 또는 catch 어구 에 어떤 코드 가 포함 되 어 있 든 지, 심지어 return 문구 가 포함 되 어 있 든 지 간 에 finally 자구 의 집행 을 막 지 않 습 니 다.아래 의 이 함 수 를 보 세 요.
function testFinally(){ 
    try { 
        return 2; 
    } catch (error){ 
        return 1; 
    } finally { 
        return 0; 
    } 
}

이 함 수 는 try-catch 문장의 모든 부분 에 하나의 return 문 구 를 놓 았 다.겉으로 볼 때 이 함 수 를 호출 하면 되 돌아 갑 니 다 2. 되 돌아 가기 2return 문 구 는 try 구문 블록 에 있 고 이 문 구 를 실행 하 는 데 오류 가 없 기 때 문 입 니 다.그러나 마지막 에 finally 자구 가 하나 더 있 기 때문에 결 과 는 이 return 문 구 를 무시 할 수 있다.이 함 수 를 호출 하면 되 돌아 갈 수 밖 에 없다 는 것 이다 0.finally 자 구 를 떼 면 이 함 수 는 되 돌아 갑 니 다 2.
코드 에 finally 자구 가 포함 되 어 있 으 면 trycatch 구문 블록 에 있 는 return 문 구 는 무시 된다.finally 자 구 를 제공 하면 catch 자 구 는 선택 할 수 있 는 catch 또는 finally 하나 가 되면 된다.
오류 형식
코드 를 실행 하 는 동안 발생 할 수 있 는 오 류 는 여러 가지 유형 이 있 습 니 다.모든 오 류 는 대응 하 는 오류 유형 이 있 고 오류 가 발생 하면 해당 유형의 오류 대상 을 던 집 니 다.JS 에는 다음 7 가지 오류 유형 이 있 습 니 다.
  • Error
  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

  • 그 중에서 Error 는 기본 형식 이 고 다른 오류 유형 은 모두 이 유형 에서 계승 된다.따라서 모든 오류 유형 은 같은 속성 을 공유 합 니 다 (오류 대상 의 방법 은 모두 기본 대상 방법 입 니 다).Error 형식의 오 류 는 매우 드 물 며, 있 으 면 브 라 우 저가 던 진 것 입 니 다.이 기본 유형의 주요 목적 은 개발 자 들 이 사용자 정의 오 류 를 던 질 수 있 도록 하 는 것 이다.
    EvalError 형식의 오 류 는 eval() 함 수 를 사용 하여 이상 이 발생 했 을 때 던 집 니 다.만약 에 직접 호출 하지 않 는 방식 으로 eval 속성의 값 을 사용 하거나 eval 속성 에 값 을 부여 한다 면 쉽게 말 하면 eval() 을 함수 로 호출 하지 않 으 면 오 류 를 던 질 수 있 습 니 다. 예 를 들 어:
    new eval(); //   EvalError 
    eval = foo; //   EvalError 
    

    실제로 브 라 우 저가 오 류 를 던 져 야 할 때 EvalError 를 던 지 는 것 은 아니다.예 를 들 어 Firefox 4 + 와 IE8 은 첫 번 째 상황 에 대해 TypeError 를 던 지고 두 번 째 상황 은 성공 적 으로 실행 되 며 오류 가 발생 하지 않 습 니 다.
    RangeError 형식의 오 류 는 수치 가 해당 범 위 를 초과 할 때 발생 합 니 다.예 를 들 어 배열 을 정의 할 때 배열 이 지원 하지 않 는 항목 (예 를 들 어 -20 이나 Number.MAX_VALUE 을 지정 하면 이러한 오류 가 발생 합 니 다.
    ReferenceError 형식의 오 류 는 존재 하지 않 는 변수 에 접근 할 때 발생 합 니 다.
    SyntaxError 형식의 오 류 는 문법 이 잘못된 JavaScript 문자열 을 eval() 함수 에 입력 할 때 이러한 오 류 를 초래 할 수 있 습 니 다.문법 오류 코드 가 eval() 함수 외 에 나타 나 면 SyntaxError 를 사용 할 수 없습니다. 이 때 문법 오류 로 인해 자 바스 크 립 트 코드 가 즉시 실행 을 중단 할 수 있 습 니 다.
    TypeError 형식 은 JavaScript 에서 자주 사용 되 며, 변수 에 의외 의 형식 이 저장 되 어 있 을 때 나 존재 하지 않 는 방법 에 접근 할 때 이러한 오 류 를 초래 할 수 있 습 니 다.잘못된 원인 은 다양 하지만 결국은 특정한 유형의 작업 을 수행 할 때 변수의 유형 이 요구 에 부합 되 지 않 기 때문이다.다음은 몇 가지 예 를 보 겠 습 니 다.
    var o = new 10; //   TypeError 
    alert("name" in true); //   TypeError 
    Function.prototype.toString.call("name"); //   TypeError 
    

    가장 자주 발생 하 는 유형 오류 의 경우 함수 에 전 달 된 매개 변 수 는 사전에 검 사 를 거치 지 않 았 고 결과 전송 유형 은 예상 유형 과 일치 하지 않 습 니 다.
    URIError 형식의 오 류 는 encodeURI() 또는 decodeURI() 사용 되 며, URI 형식 이 올 바 르 지 않 을 경우 URIError 오류 가 발생 할 수 있 습 니 다.앞에서 말 한 이 두 함수 의 용 착 성 이 매우 높 기 때문에 이런 잘못 도 매우 드물다.
    잘못된 유형 을 알 고 싶 으 면 아래 와 같이 try-catch 문장의 catch 구문 에서 instanceof 연산 자 를 사용 할 수 있 습 니 다.
    try{ 
        someFunction(); 
    } catch (error){ 
        if (error instanceof TypeError){ 
        //      
        } else if (error instanceof ReferenceError){ 
        //      
        } else { 
        //         
        } 
    }
    

    크로스 브 라 우 저 프로 그래 밍 에서 오류 유형 을 검사 하 는 것 은 처리 방식 을 확정 하 는 가장 간편 한 방법 입 니 다.message 속성 에 포 함 된 오류 메 시 지 는 브 라 우 저 에 따라 다 릅 니 다.
    try - catch 합 리 적 사용try-catch 문구 에 오류 가 발생 했 을 때 브 라 우 저 는 오류 가 이미 처리 되 었 다 고 생각 하기 때문에 본 장 앞에서 토론 한 메커니즘 을 통 해 오 류 를 기록 하거나 보고 하지 않 습 니 다.사용자 에 게 기술 을 이해 하 라 고 요구 하지 않 고 사용자 가 잘못 이해 할 필요 가 없 는 웹 프로그램 에 대해 서 는 이상 적 인 결과 라 고 할 수 있다.그러나 try-catch 우 리 는 자신의 오류 처리 체 제 를 실현 할 수 있다.사용 try-catch 은 우리 가 통제 할 수 없 는 오 류 를 처리 하 는 데 가장 적합 하 다.대형 자 바스 크 립 트 라 이브 러 리 의 함 수 를 사용한다 고 가정 하면 이 함 수 는 의도 적 으로 오 류 를 던 질 수 있 습 니 다.우 리 는 이 라 이브 러 리 의 소스 코드 를 수정 할 수 없 기 때문에 이 함수 에 대한 호출 을 try-catch 구문 에 넣 을 수 있 습 니 다. 만약 에 무슨 오류 가 발생 하면 적당 하 게 처리 할 수 있 습 니 다.자신의 코드 에 오류 가 발생 할 수 있다 는 것 을 명명백백 하 게 알 았 을 때 try-catch 문 구 를 다시 사용 하 는 것 은 적절 하지 않다.예 를 들 어 함수 에 전 달 된 매개 변수 가 수치 가 아 닌 문자열 이 라면 함수 에 오류 가 발생 할 수 있 으 므 로 매개 변수의 유형 을 먼저 검사 한 다음 에 어떻게 할 지 결정 해 야 합 니 다.이 경우 try-catch 문 구 를 사용 하지 않 는 다.

    좋은 웹페이지 즐겨찾기