JavaScript의 예외 처리는 "시도… 캐치… 마침내"문을 통해 구현됩니다. "Try"절에는 예외를 생성 할 수있는 코드가 포함되어 있으며 예외가 발생하면 "캐치"조항이 실행되며 결과에 관계없이 "마지막"조항이 실행됩니다.
javaScript에는 예외 처리를위한 7 개의 내장 오류 객체가 있습니다 : 오류, 범위에 서, 참조 오레러, 구문 오버러, 타입 오르러, Urierror 및 EvalerRor가 있습니다. 각 객체는 특정 유형의 오류를 나타냅니다.
JavaScript를 사용하면 개발자가 "Throw"문을 사용하여 자신의 예외를 던질 수 있습니다. 이로 인해 코드는 의미있는 오류 메시지를 생성 할 수 있기 때문에 디버깅 및 유지 관리를보다 쉽게 디버깅하고 유지할 수 있습니다.
는 기존 "오류"유형을 확장하여 사용자 정의 예외 유형을 만들 수 있습니다. 이를 통해 복잡한 응용 프로그램에서보다 구체적이고 관련 오류 처리가 가능합니다.
소프트웨어 개발에서 머피의 법칙도 적용됩니다. 잘못 될 수있는 것은 잘못 될 것입니다. 단순하지 않은 프로그램의 경우
가 오류가 발생하는지 여부가 아니라
가 오류가 발생하는지 여부입니다. 표준 호환되지 않는 지원되지 않는 기능 및 브라우저 기능은 웹 개발자가 직면 한 잠재적 인 문제의 몇 가지 소스 일뿐입니다. 발생할 수있는 모든 문제가 주어지면 JavaScript에는 놀랍도록 간단한 오류 처리 방법이 있습니다. 단지 포기하고 조용히 실패합니다. 적어도 이것은 사용자가 보는 동작입니다. 사실, 많은 일들이 무대 뒤에서 일어났습니다.
javaScript 문에 오류가 발생하면
예외 를 던지는 것으로 알려져 있습니다. JavaScript 통역사는 다음 문장을 계속 실행하지 않고 예외 처리 코드를 확인합니다. 예외 핸들러가 없으면 프로그램은 예외를 던지는 모든 함수에서 반환됩니다. 이렇게하면 예외 핸들러가 발견되거나 최상위 기능에 도달하여 프로그램이 종료 될 때까지 통화 스택의 각 기능을 반복합니다.
오류 객체
예외가 발생하면 오류를 나타내는 객체가 생성되고 던져집니다. JavaScript 언어는 7 가지 유형의 내장 오류 객체를 정의합니다. 이러한 오류 유형은 예외 처리의 기초입니다. 각 오류 유형은 아래에 자세히 설명되어 있습니다. 오류
"오류"유형은 일반적인 예외를 나타내는 데 사용됩니다. 이 예외 유형은 사용자 정의 예외를 구현하는 데 가장 일반적으로 사용됩니다. 사용자 정의 예외를 작성하는 주제는이 기사의 뒷부분에서 재검토됩니다. "오류"객체는 다음 예와 같이 생성자를 호출하여 인스턴스화됩니다.
RangeError
숫자가 지정된 범위를 초과하면 "RangeError"예외가 생성됩니다. 예를 들어, JavaScript 번호에는 tofixed () 메소드가 있으며, 이는 소수점 이후에 나타나는 숫자 수를 나타 내기 위해 "숫자"매개 변수를 사용합니다. 이 매개 변수는 0과 20 사이 여야합니다 (일부 브라우저는 더 넓은 범위를 지원하지만). "숫자"의 값 이이 범위를 벗어나면 "범위 오르러"가 던져집니다. 다음 예는 이것을 보여줍니다.
참조 오류
존재하지 않는 변수에 액세스 할 때 "참조 기"예외가 발생합니다. 이러한 예외는 일반적으로 철자가 틀린 기존 변수 이름이있을 때 발생합니다. 다음 예에서 "참조 오류"는 "바"에 액세스 할 때 발생합니다. 이 예제는 작업을 증가시킬 때 "Bar"가 활성 범위에 존재하지 않는다고 가정합니다.
var error = new Error("error message");
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
syntaxerror
JavaScript 언어 규칙이 위반되면 "SyntaxError"가 발생합니다. C 및 Java와 같은 언어에 익숙한 개발자는 편집하는 동안 구문 오류를 만나는 데 사용됩니다. 그러나 JavaScript는 해석 된 언어이므로 코드가 실행될 때까지 구문 오류가 인식되지 않습니다. 구문 오류는 복구 할 수없는 유일한 예외 유형이므로 고유합니다. 다음 예제는 "if"문에 올바른 버팀대가 없기 때문에 구문 오류를 생성합니다.
<<> typeError
값이 예상 유형이 아닌 경우 "TypeError"예외가 발생합니다. 존재하지 않는 객체 방법을 호출하는 것은 그러한 예외의 일반적인 원인입니다. 다음 예제는 "foo"라는 빈 개체를 생성 한 다음 Bar () 메소드를 호출하려고합니다. bar ()가 정의되지 않으므로 호출하려고 할 때 "TypeError"가 던져집니다.
var pi = 3.14159;
pi.toFixed(100000); // RangeError
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<<> urierror <🎜 🎜>
encodeuri () 및 decodeuri ()와 같은 메소드가 기형 URI를 만나면 "urierror"예외가 발생합니다. 다음 예제는 문자열 "%"를 해독하려고 할 때 "Urierror"를 생성합니다. "%"문자는 URI 탈출 시퀀스의 시작을 나타냅니다. 이 예에서 "%"이후에는 아무것도 없기 때문에 문자열은 유효하지 않은 탈출 시퀀스이므로 기형 URI 구성 요소입니다.
<<> 평가자 <🎜
<(> eval () 함수가 사용되지 않으면 "EvalerRor"예외가 발생됩니다. 이러한 예외는 ECMAScript 표준의 최신 버전에서 사용되지 않습니다. 그러나 이전 버전 표준과의 뒤로 호환성을 유지하기 위해 여전히 지원됩니다.
function foo() {
bar++; // ReferenceError
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
<🎜 🎜> <<> 예외 처리
<🎜 🎜>
이제 우리는 예외가 무엇인지 알았으므로 프로그램이 충돌하지 않도록하는 방법을 배워야합니다. JavaScript는 "시도… 캐치… 마침내"진술을 통해 예외를 처리합니다. 일반적인 예제 문은 다음과 같습니다.
"시도 시도 ... 캐치 ... 마침내"진술의 첫 번째 부분은 "시도"조항입니다. "시도"절은 프로그래머가 예외를 생성 할 수있는 코드 블록을 분리하기 위해 필요합니다. "시도"조항은 하나 또는 두 개의 "캐치"와 "마침내"조항을 따라야합니다.
if (foo) { // SyntaxError
// 缺少右花括号
}
로그인 후 복사
<<> "Catch"절
<🎜 🎜> "시도… 캐치… 마침내"의 두 번째 부분은 "캐치"조항입니다. "Catch"절은 "시도"절에서 예외가 발생할 때만 실행되는 코드 블록입니다. "캐치"절은 선택 사항이지만, 예외 없이는 실제로 처리 할 수 없습니다. "Catch"절은 통화 스택에서 전파되는 예외가 예외를 방지하여 프로그램 복구를 허용하기 때문입니다. "시도"블록에서 예외가 발생하면 제어는 즉시 "캐치"조항으로 전달됩니다. 발생하는 예외는 처리를위한 "캐치"블록으로 전달됩니다. 다음 예제는 "Catch"절을 사용하여 "참조 오류"를 처리하는 방법을 보여줍니다. "referenceError"객체는 "예외"변수를 통해 "Catch"절에서 사용할 수 있습니다.
복잡한 응용 프로그램은 다양한 예외를 생성 할 수 있습니다. 이 경우 "인스턴스"연산자를 사용하여 다양한 유형의 예외를 구별 할 수 있습니다. 다음 예에서는 "시도"절이 여러 유형의 예외를 생성 할 수 있다고 가정합니다. 해당 "Catch"절은 "Incastof"를 사용하여 "TypeError"및 "ReferenceError"를 다른 모든 유형의 오류와 별도로 처리합니다.
var error = new Error("error message");
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<<> "마침내"절
var pi = 3.14159;
pi.toFixed(100000); // RangeError
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<🎜 🎜>
"시도… 캐치… 마침내"진술의 마지막 구성 요소는 선택 사항 "마침내"조항입니다. "마지막"절은 오류가 발생하는지 여부에 관계없이 "시도"및 "캐치"조항 후에 실행 된 코드 블록입니다. "마지막으로"조항은 어쨌든 실행 해야하는 코드 청소 (파일 종료 등)를 포함하는 데 유용합니다. "마지막으로"조항은 예외가 발생하더라도 실행됩니다. 이 경우 "마지막으로"조항이 실행되며, 던진 예외는 정상적으로 계속됩니다.
"마지막"절에 대한 흥미로운 메모는 "시도"또는 "캐치"절이 "반환"명령문을 실행하더라도 실행된다는 것입니다. 예를 들어, 다음 함수는 "최종"절이 마지막으로 실행 된 내용이므로 False를 반환합니다.
<🎜 🎜> <<> 예외
JavaScript를 사용하면 프로그래머가 "Throw"라는 진술을 통해 자신의 예외를 던질 수 있습니다. 이 개념은 경험이없는 개발자에게는 약간 혼란 스러울 수 있습니다. 결국, 개발자들은 오류없이 코드를 작성하는 데 어려움을 겪고 있지만 "던지기"진술은 의도적으로 오류를 소개합니다. 그러나 의도적으로 예외를 던지면 실제로 코드가 더 쉽게 디버깅하고 유지 관리 할 수 있습니다. 예를 들어, 의미있는 오류 메시지를 작성하면 문제를 식별하고 해결하기가 더 쉽습니다.
다음은 "던지기"진술의 몇 가지 예를 보여줍니다. 예외로 던질 수있는 데이터 유형에는 제한이 없습니다. 동일한 데이터를 캡처하고 던질 수있는 횟수에는 제한이 없습니다. 다시 말해, 예외는 던져지고 잡힌 다음 다시 던져 질 수 있습니다.
"Throw"문은 모든 데이터 유형과 함께 사용할 수 있지만 내장 예외 유형을 사용하면 몇 가지 장점이 있습니다. 예를 들어, Firefox는 파일 이름 및 예외가 발생하는 줄 번호와 같은 디버그 정보를 추가하여 이러한 객체를 전문으로합니다.
function foo() {
bar++; // ReferenceError
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
예를 들어, , 디비전 작업이 응용 프로그램 어딘가에 발생한다고 가정하십시오. 분열이 발생하는 상황이있을 수 있으므로, 부서는 번거로울 수 있습니다. JavaScript에서 이러한 작업은 "Nan"을 초래합니다. 이로 인해 디버깅하기 어려운 혼란스러운 결과가 발생할 수 있습니다. 앱이 0으로 나누는 것에 대해 큰 소리로 불평하면 상황이 훨씬 간단해질 것입니다. 다음 "if"진술은 예외를 던져서이를 수행합니다.
물론 아래 그림과 같이 "범위 서기"를 사용하는 것이 더 적절할 수 있습니다.
var error = new Error("error message");
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
<<> 사용자 정의 예외 객체
<🎜 🎜>
우리는 내장 예외 유형을 사용하여 사용자 정의 오류 메시지를 생성하는 방법을 배웠습니다. 그러나 다른 방법은 기존 "오류"유형을 확장하여 새 예외 유형을 만드는 것입니다. 새 유형은 "오류"에서 상속되므로 다른 내장 예외 유형과 같이 사용할 수 있습니다. 이 기사에서는 JavaScript의 상속 주제에 대해서는 논의하지 않지만 간단한 기술이 여기에 소개됩니다.
var pi = 3.14159;
pi.toFixed(100000); // RangeError
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
다음 예제는 부서를 0으로 처리하는 문제로 돌아갑니다. 이전과 같이 "error"또는 "rangeerror"객체를 사용하는 대신 자체 예외 유형을 만들려고합니다. 이 예에서는 "DivisionByzeroRror"예외 유형을 만들고 있습니다. 예제의 함수는 새로운 유형의 생성자 역할을합니다. 생성자는 "이름"및 "메시지"속성을 할당 할 책임이 있습니다. 이 예제의 마지막 두 줄은 새 유형이 "오류"객체에서 상속 될 수 있도록합니다.
<🎜 🎜> <<> 기억해야 할 것들 <🎜 🎜>
<…> "시도… 캐치… 마침내"진술은 예외를 처리하는 데 사용됩니다.
"시도"절은 예외를 생성 할 수있는 코드를 식별합니다.
"캐치"절은 예외가 발생할 때만 실행됩니다.
< ">"마침내 "절은 무엇이든 항상 실행됩니다.
"던지기"문은 예외를 생성하는 데 사용됩니다.
function foo() {
bar++; // ReferenceError
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
사용자 정의 예외 객체는 기존 "오류"유형에서 상속해야합니다.
Fotolia의 사진 JavaScript 예외 처리 FAQ
JavaScript의 구문 오류와 런타임 오류의 차이점은 무엇입니까?
구문 분석 오류라고도하는 구문 오류는 전통적인 프로그래밍 언어로 컴파일 시간과 JavaScript의 해석 시간에 발생합니다. 구문 오류는 코드가 구문 적으로 부정확하고 구문 분석 할 수없는 경우에 발생합니다. 예를 들어, 닫는 브래킷을 잊어 버리거나 불법 문자를 사용하면 구문 오류가 발생합니다.
반면에 성공적인 컴파일 후 프로그램 실행 중에 런타임 오류가 발생합니다. 이러한 오류는 일반적으로 코드에 의해 수행되는 불법 작업으로 인해 발생합니다. 예를 들어, 정의되지 않은 변수에 액세스하거나 존재하지 않는 함수를 호출하려고하면 런타임 오류가 발생할 수 있습니다.
JavaScript의 예외를 처리하는 방법은 무엇입니까?
JavaScript는 시도를 제공합니다. Try Block에는 예외를 던질 수있는 코드가 포함되어 있으며 Catch Block에는 시도 블록에서 예외가 발생하면 실행되는 코드가 포함되어 있습니다. 간단한 예는 다음과 같습니다.
var error = new Error("error message");
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
JavaScript에서 "마지막으로"블록의 목적은 무엇입니까?
< "> JavaScript의"마지막으로 "블록은 결과에 관계없이 시도 및 캐치 블록 후 코드를 실행하는 데 사용됩니다. 이는 "최종"블록의 코드가 예외가 발생했는지 여부에 관계없이 실행될 것임을 의미합니다. 일반적으로 파일 폐쇄 또는 리소스를 지우는 등 코드가 실행 된 후에 정리하는 데 사용됩니다.
JavaScript에서 내 자신의 예외를 던질 수 있습니까?
예, JavaScript를 사용하면 "Throw"명령문을 사용하여 자신의 예외를 던질 수 있습니다. 문자열, 숫자, 부울 값 또는 객체를 포함하여 모든 유형의 예외를 던질 수 있습니다. 예외가 발생하면 프로그램의 일반 프로세스가 중지되고 최신 예외 핸들러로 제어됩니다.