일반적인 오류 처리 메커니즘

4112 단어

기본 오류 유형


1.1 SyntaxError 객체syntaxerror 는 코드를 해석할 때 발생하는 문법 오류입니다.
//  
var 1a;
// Uncaught SyntaxError: Invalid or unexpected token

//  
console.log 'hello');
// Uncaught SyntaxError: Unexpected string
Uncaught SyntaxError: Invalid or unexpected token: 발견되지 않은 문법 오류: 무효 또는 의외의 표지.
위 코드의 오류는 모두 문법 해석 단계에서 발견할 수 있기 때문에 던진다SyntaxError.첫 번째 오류 힌트는 token 불법이며, 두 번째 오류 힌트는 문자열이 요구에 부합되지 않는다는 것이다.
1.2 Reference Error 객체ReferenceError 는 존재하지 않는 변수를 인용할 때 발생하는 오류입니다.
//  
unknownVariable
// Uncaught ReferenceError: unknownVariable is not defined

또 다른 터치 장면은 함수의 운행 결과나this에 값을 부여할 수 없는 대상에게 값을 분배하는 것이다.
//  
console.log() = 1
// Uncaught ReferenceError: Invalid left-hand side in assignment

// this  
this = 1
// ReferenceError: Invalid left-hand side in assignment

위 코드가 함수console.log의 운행 결과와 this에 대한 값을 부여한 결과 ReferenceError 오류가 발생했습니다.
1.3 RangeError 객체RangeError 는 값이 유효 범위를 초과할 때 발생하는 오류입니다.배열 길이가 음수이고 Number 객체의 메소드 매개 변수가 범위를 초과하며 함수 스택이 최대값을 초과하는 경우가 주로 있습니다.
//  
new Array(-1)
// Uncaught RangeError: Invalid array length

1.4 TypeError 객체
TypeError 객체는 변수 또는 매개변수가 예상 유형이 아닐 때 발생하는 오류입니다.예를 들어 문자열, 브리 값, 수치 등 원시 형식의 값에 new 명령을 사용하면 new 명령의 매개 변수는 구조 함수이기 때문에 이런 오류를 던질 수 있다.
new 123
// Uncaught TypeError: number is not a func

var obj = {};
obj.unknownMethod()
// Uncaught TypeError: obj.unknownMethod is not a function

위 코드의 두 번째 경우 호출 대상이 존재하지 않는 방법도 TypeError 오류를 던진다. obj.unknownMethod의 값은 undefined이지 함수가 아니기 때문이다.
1.5 URIerror 객체URIError 는 URI 관련 함수의 매개 변수가 정확하지 않을 때 던진 오류로 주로 encodeURI(),decodeURI(),encodeURIComponent(),decodeURIComponent(),escape()unescape() 등 6개 함수와 관련된다.
decodeURI('%2')
// URIError: URI malformed

1.6 EvalError 객체
eval 함수가 제대로 실행되지 않았을 때 EvalError 오류가 발생합니다.이 오류 형식은 더 이상 사용하지 않습니다. 단지 이전 코드와 호환성을 확보하기 위해서 계속 보존합니다.
1.7 Error 인스턴스 객체
JavaScript가 분석 또는 실행될 때 오류가 발생하면 엔진이 오류 객체를 던집니다.자바스크립트 원본 제공 Error 구조 함수, 모든 버퍼링 오류가 이 구조 함수의 실례입니다.
var err = new Error(' ');
err.message // " "

위 코드에서 우리는 Error 구조 함수를 호출하여 실례 대상err을 생성한다.Error 구조 함수는 하나의 매개 변수를 받아들여 오류 알림을 표시하고 실례적인 message 속성에서 이 매개 변수를 읽을 수 있다.Error 실례 대상을 던진 후 전체 프로그램은 오류가 발생한 곳에서 중단되고 더 이상 실행되지 않습니다.
JavaScript 언어 표준은 Error 실례 대상은 message 속성이 있어야 하며 오류가 발생했을 때의 알림 정보를 표시하고 다른 속성은 언급하지 않았다.대부분의 자바스크립트 엔진은 Error 실례에 대해 name 속성과 stack 속성을 제공하는데, 각각 잘못된 이름과 잘못된 창고를 표시하지만, 그것들은 비표준적이며, 모든 실현이 다 있는 것은 아니다.
message: 
name: ( )
stack: ( )
namemessage 두 속성을 사용하면 어떤 오류가 발생했는지 대략적으로 이해할 수 있다.
if (error.name) {
  console.log(error.name + ': ' + error.message);
}
stack 속성은 오류가 발생했을 때의 창고를 보는 데 사용됩니다.
function throwit() {
  throw new Error('');
}

function catchit() {
  try {
    throwit();
  } catch(e) {
    console.log(e.stack); // print stack trace
  }
}

catchit()
// Error
//    at throwit (~/examples/throwcatch.js:9:11)
//    at catchit (~/examples/throwcatch.js:3:9)
//    at repl:1:5

위 코드에서 오류 창고의 가장 안쪽은 throwit 함수이고 그 다음은 catchit 함수이며 마지막은 함수의 운행 환경이다.
상기 6가지 파생 오류는 원시적Error 대상과 함께 구조 함수이다.개발자는 그것들을 사용하여 수동으로 오류 대상의 실례를 생성할 수 있다.이 구조 함수들은 오류 알림 정보message를 대표하는 매개 변수를 받아들인다.
var err1 = new Error(' !');
var err2 = new RangeError(' , !');
var err3 = new TypeError(' , !');

err1.message // " !"
err2.message // " , !"
err3.message // " , !"

좋은 웹페이지 즐겨찾기