javascript 오류 처리 형식
6277 단어 자바 script
오류 구조 함수
javascript 규범 에는 모두 8 개의 오류 유형 구조 함수 가 있 습 니 다.
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])
인자:
잘못 을 내던지다
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
수치 가 유효 범 위 를 초과 하 다.일부 방법 에서 들 어 오 는 수 치 는 반드시 일정한 범위 내 에 있어 야 한다. 그렇지 않 으 면 범 위 를 초과 하 는 오 류 를 던 질 수 있다.
let arr = new Array(-1)
오류 던 지기:
Uncaught RangeError: Invalid array length
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
이상 은 잘못된 구조 함수 의 총 결 입 니 다. 잘못된 점 이 있 으 면 바로 잡 는 것 을 환영 합 니 다.이상 의 모든 잘못된 장면 은 그다지 많이 열거 되 지 않 았 습 니 다. 만약 새로운 잘못된 정보 가 발견 된다 면 댓 글 토론 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.