javascript 오류 처리 형식

6277 단어 자바 script
자 바스 크 립 트 를 쓸 때 디 버 깅 오류 가 적지 않 아야 합 니 다. 브 라 우 저 에서 오 류 를 출력 할 수 있 는 것 외 에 오류 의 유형 이 무엇 인지 알 아야 합 니 다.또한 가끔 은 자신 이 봉 인 된 도구 함수 에서 잘못된 유형의 인 자 를 전달 하지 않 거나 전달 하지 않 고 오 류 를 적당 하 게 던 져 경 고 를 해 야 합 니 다.프레임 워 크 를 사용 하 는 것 이 정상 적 이지 않 은 경우 에 도 오 류 를 던 질 수 있 으 며, 오류 에 대해 아무것도 모 르 면 디 버 깅 을 할 수 없다.상술 한 것 을 종합 하여 잘못된 처리 체제 가 얼마나 필요 한 지 알 아 보 자. 다음은 필자 가 귀납 적 으로 정리 한 것 이다. 잘못된 점 이 있 으 면 지적 해 주 십시오.
오류 구조 함수
javascript 규범 에는 모두 8 개의 오류 유형 구조 함수 가 있 습 니 다.
  • 오류 -- 오류 대상
  • SyntaxError -- 해석 과정 문법 오류
  • TypeError -- 유효 유형 에 속 하지 않 음
  • ReferenceError -- 무효 인용
  • RangeError -- 수치 가 유효 범 위 를 초과 합 니 다
  • URIError -- URI 인 코딩 해석 오류
  • EvalError -- eval 함수 호출 오류
  • Internal Error -- Javascript 엔진 내부 오류 의 이상 투하, "너무 많은 재 귀"
  • 그 중 두 가 지 는 특별한 설명 을 한다.
    EvalError 는 eval 함수 오 류 를 호출 하여 버 렸 습 니 다. 뒤로 호 환 하기 위해 저 버 전 을 사용 할 수 있 습 니 다.Internal Error 재 귀적 오류 가 발생 했 습 니 다. 대부분의 브 라 우 저 는 실현 되 지 않 았 고 비 표준 적 인 방법 에 속 하 며 생산 환경 에서 사용 하지 않 습 니 다.
    상속 관계
    Error 는 잘못된 기본 클래스 입 니 다. 다른 유형 은 Error 클래스 를 계승 합 니 다. ES6 에서 제공 하 는 Object. getPrototypeOf () 를 사용 하여 한 클래스 가 다른 클래스 를 계승 하 였 는 지 판단 할 수 있 습 니 다.
    console.log(Object.getPrototypeOf(SyntaxError) === Error);    // true
    console.log(Object.getPrototypeOf(TypeError) === Error);   // true
    console.log(Object.getPrototypeOf(ReferenceError) === Error);   // true
    console.log(Object.getPrototypeOf(RangeError) === Error);   // true
    console.log(Object.getPrototypeOf(URIError) === Error);   // true
    console.log(Object.getPrototypeOf(EvalError) === Error);   // true

    모든 잘못된 유형의 사용 과 오류 장면 에 대해 이야기 합 니 다.
    Error
    Error 구조 기 를 통 해 오류 대상 을 만 들 수 있 습 니 다.실행 중 오류 가 발생 하면 오류 의 인 스 턴 스 대상 이 던 져 집 니 다.
    문법: new Error ([message])
    인자:
  • message 선택 가능, 오류 설명 정보.

  • 잘못 을 내던지다
    throw 문 구 를 사용 하여 이상 을 던 집 니 다.
    throw new Error('          ')

    실행 후 콘 솔 에서 출력 을 출력 합 니 다:
    Uncaught Error: 오류 메시지 가 나 왔 습 니 다.
    메모: throw 를 사용 하여 이상 을 던 진 후 코드 가 실행 되 지 않 습 니 다.
    캡 처 오류
    try {} catch () {} 문 구 를 통 해 이 오 류 를 포착 할 수 있 습 니 다.
    try{
        throw new Error('          ')
    }catch(err){
        alert(err.name + ' '+ err.message)
    }

    속성 설명: new Error 를 사용 하여 오류 인 스 턴 스 를 만 들 면 두 개의 속성 이 있 습 니 다.
    let e =  new Error('          ');

    name 속성, 잘못된 형식 입 니 다. 이 때 는 Errormessage 속성, 잘못된 정보 입 니 다. 이 때 는 '잘못된 정보 입 니 다' 입 니 다.
    SyntaxError
    해석 과정 문법 오류, 이런 유형 에서 던 진 오류 가 많 습 니 다. 흔히 글 을 쓸 때 발생 하 는 문법 오류 입 니 다. 예 를 들 어:
     let n = 1\1;   // Uncaught SyntaxError: Invalid or unexpected token
     let str = "hel"lo" // Uncaught SyntaxError: Unexpected identifier
     let 123Var = 'hi' // Uncaught SyntaxError: Invalid or unexpected token

    문법 오류 가 많 으 면 일일이 열거 하지 않 습 니 다. 브 라 우 저가 실 행 될 때 컨트롤 러 가 잘못 던 지고 몇 줄 을 알려 주기 때문에 디 버 거 가 편리 합 니 다.그러나 잘못된 유형 이 SyntaxError 이 고 뒤의 오류 정 보 를 읽 으 면 잘못 을 고 칠 수 있 습 니 다.
    TypeError
    유효 유형 에 속 하지 않 습 니 다.이런 오 류 는 필요 한 유형 이 아니 라 조작 이 불가능 하고 유형 오 류 를 던 지 는 것 이다.
  • 변수 나 매개 변 수 는 예상 유형 이 아 닙 니 다.
      **new**         ,        ,        
  • let fn = 'hello';
    new fn;

    오류 던 지기:
    Uncaught TypeError: fn is not a constructor
  • 호출 대상 이 존재 하지 않 는 방법
  • let obj = {};
    obj.fn()

    오류 던 지기:
    Uncaught TypeError: obj.fn is not a function
  • 물론 패키지 함수 에서 강제로 들 어 오 는 매개 변 수 를 지정 한 형식 으로 할 수 있 습 니 다. 그렇지 않 으 면 형식 오 류 를 던 질 수 있 습 니 다.
  • function flatten(arr){
        if( !Array.isArray(arr) ){
            throw new TypeError('        ')
        }    
    }
    flatten('test');

    들 어 오 는 인자 가 배열 이 아 닐 때 사용자 정의 형식 오 류 를 던 집 니 다.
    Uncaught TypeError:         

    ReferenceError
    인용 이 잘못 되 었 습 니 다.
  • 존재 하지 않 는 변 수 를 인용 했다
  • console.log(a);

    잘못 을 내던지다
    Uncaught ReferenceError: a is not defined
  • 변 수 를 할당 할 수 없 는 데이터 에 할당 합 니 다.
    let str = 'hello';
    if( str.charAt(0) = 'h' ){
        console.log('      h');
    }

    오류 던 지기:
    Uncaught ReferenceError: Invalid left-hand side in assignment
    RangeError
    수치 가 유효 범 위 를 초과 하 다.일부 방법 에서 들 어 오 는 수 치 는 반드시 일정한 범위 내 에 있어 야 한다. 그렇지 않 으 면 범 위 를 초과 하 는 오 류 를 던 질 수 있다.
  • 배열 을 만 들 고 들 어 오 는 길 이 는 0
  • 보다 작 습 니 다.
    let arr = new Array(-1)

    오류 던 지기:
    Uncaught RangeError: Invalid array length
  • repeat 방법 은 지정 한 문자열 의 중복 횟수 가 0
  • 보다 적 습 니 다.
    let str = 'hello';
    str.repeat(-1)

    오류 던 지기:
    Uncaught RangeError: Invalid count value
    URIError
    URI 인 코딩 을 처리 하 는 중 오류 가 발생 했 습 니 다.함수 매개 변수 가 정확 하지 않 습 니 다. 주로 encodeURI (), decodeURI (), encodeURIComponent (), decodeURIComponent (), escape () 와 unescape () 여섯 개의 함수 입 니 다.
    예 를 들 면:
    decodeURIComponent('%');
    decodeURI('%2')

    오류 던 지기:
    Uncaught URIError: URI malformed
    사용자 정의 오류 형식
    때때로 오류 형식 을 사용자 정의 하려 면 구조 함 수 를 사용자 정의 한 다음 에 원형 계승 Error. prototype 을 계승 하면 됩 니 다.
    function MyErrorType(message){
        this.message = message || '  ';
        this.name = 'MyErrorType';
        this.stack = (new Error()).stack;  //         
    }
    
    MyErrorType.prototype = Object.create(Error.prototype);
    MyErrorType.prototype.constructor = MyErrorType;
    
    throw new MyErrorType('           ')

    호출 에 대한 오류 스 택 정보
    잘못된 추적 기능 을 제공 합 니 다. 어떤 호출 순서 로 파일 의 어느 줄 에서 이 오 류 를 포착 합 니까?예 를 들 어 다음 호출:
    function trace() {
      try {
        throw new Error('myError');
      }
      catch(e) {
        console.log(e.stack);
      }
    }
    function b() {
      trace();
    }
    function a() {
      b(3, 4, '

    ', undefined, {}); } a('first call, firstarg');

    오류 메시지:
    Error: myError
        at trace (:3:14)
        at b (:10:6)
        at a (:13:6)
        at :15:4

    이상 은 잘못된 구조 함수 의 총 결 입 니 다. 잘못된 점 이 있 으 면 바로 잡 는 것 을 환영 합 니 다.이상 의 모든 잘못된 장면 은 그다지 많이 열거 되 지 않 았 습 니 다. 만약 새로운 잘못된 정보 가 발견 된다 면 댓 글 토론 을 환영 합 니 다.

    좋은 웹페이지 즐겨찾기