English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JavaScript 코드를 실행할 때, 예상치 못한 오류가 발생할 수 있습니다.
오류는 프로그래머가 작성한编码 오류, 입력 오류로 인한 오류, 그리고 예상치 못한 일들일 수 있습니다.
따라서 오류를 처리하기 위해 JavaScript는4키워드:
try 문은 코드 블록에 오류가 있는지 테스트할 수 있게 합니다.
catch 문은 오류를 처리할 수 있게 합니다.
throw 문은 사용자 정의 오류를 생성할 수 있게 합니다.
finally 문은 시도하고 캡처한 후에도 결과와 관계없이 코드를 실행할 수 있게 합니다.
이 예제에서는 'alert'을 'aaalert'로 잘못 적어 오류를故의적으로 발생시킵니다:
try { aaalert("Hello world"); } document.getElementById("result").innerHTML = e.name + "<br>" + e.message; }테스트를 보세요‹/›
오류가 발생할 때, JavaScript는 일반적으로 실행을 중단하고 두 가지 속성을 가진Error 객체:name과 message.
try 문은 코드 블록을 정의할 수 있게 하며, 실행할 때 오류를 테스트합니다.
catch 문은 try 블록에서 오류가 발생할 때, 실행할 코드 블록을 정의할 수 있도록 합니다.
JavaScript 문장 try와 catch는 짝으로 사용됩니다:
try { //try_statements-시도할 문장 }catch(err){ //catch_statements-에러 처리 문장 }
throw 문은 사용자 정의 예외를 발생시킵니다.
throw 문은 사용자 정의 오류를 생성하며, 기술적으로는 "예외 발생 ”。
예외는 JavaScript 문자열, 숫자, 불리언 값 또는 객체일 수 있습니다:
throw "Invalid"; // 생성 문자열 값을 가진 예외 throw 32; // 생성值为32의 예외 throw true; // true 값을 가진 예외 생성
throw와 try와 함께 사용된 catch는 프로그램 흐름을 지정하고 사용자 정의 오류 메시지를 생성할 수 있습니다.
이 예제에서 어떤 비수학적 매개변수도 전달되면 getRectArea()가 사용자 정의 오류를 발생시킵니다:
function getRectArea(width, height) { if (isNaN(width) || isNaN(height)) { throw "Parameter is not a number!"; } } try { getRectArea(5, 'Z'); } catch(err) { document.getElementById('para').innerHTML = err; }테스트를 보세요‹/›
이 예제에서 값이 오류일 경우 예외(err)가 발생합니다. catch 문은 예외(err)를 잡고 사용자 정의 오류 메시지를 표시합니다:
var x = document.querySelector("input").value; try { if(x == "") throw "is Empty"; if(isNaN(x)) throw "Not a Number"; if(x > 10) throw "too High"; if(x < 5)throw "too Low"; } catch(err) { document.getElementById("para").innerHTML = "Input " + err; }테스트를 보세요‹/›
이 finally 문은 try와 catch 다음에 코드를 실행할 수 있게 합니다. catch는 결과에 관계없이 항상 실행됩니다.
try { aaalert("Hello world"); } catch(err) { document.getElementById("result").innerHTML = err; } finally { document.getElementById("result").innerHTML += "<h3>Finally statement executed</h3>"; }테스트를 보세요‹/›
catch와 finally 문은 선택사항입니다. 그러나 try 문을 사용할 때는 이들 중 하나(또는 둘 모두)를 사용해야 합니다:
try { aaalert("Hello world"); } finally { document.getElementById("result").innerHTML = "Finally statement executed"; }테스트를 보세요‹/›
JavaScript는 오류가 발생할 때 오류 정보를 제공하는 내장된 Error 객체를 가지고 있습니다.
오류 객체는 두 가지 유용한 속성을 제공합니다: name과 message.
다음 표는 Error 객체의 속성을 나열합니다:
속성 | 설명 |
---|---|
name | 오류 이름을 설정하거나 반환합니다 |
message | 오류 메시지를 설정하거나 반환합니다 |
error name 속성은 일곱 가지 다른 값을 반환할 수 있습니다:
타입 | 설명 |
---|---|
EvalError | global 함수 eval()에 대한 오류를 나타냅니다. |
InternalError | JavaScript 엔진에서 내부 오류가 발생할 때 발생하는 오류를 나타냅니다. |
RangeError | 숫자 변수나 파라미터가 유효 범위를 벗어날 때 발생하는 오류를 나타냅니다. |
ReferenceError | 무효 참조를 취소할 때 발생하는 오류를 나타냅니다. |
SyntaxError | eval()에서 코드를 구문 분석할 때 발생하는 문법 오류를 나타냅니다. |
TypeError | 변수나 파라미터가 유효한 타입이 아닌 경우 발생하는 오류를 나타냅니다. |
URIError | encodeURI()나 decodeURI()에 무효 파라미터를 전달할 때 발생하는 오류를 나타냅니다. |
다음 절에서는 이러한 오류 유형의 각각을 자세히 설명할 것입니다.
이를 통해eval()함수 실행 중에 오류가 발생하면 EvalError가 발생합니다.
하지만, JavaScript는 이 오류를 더 이상 발생시키지 않습니다. 그러나 이 객체는 계속 유지되어 있어서 후속 호환성을 유지합니다.
JavaScript의 최신 버전은 EvalError를 발생시키지 않습니다. 대신 SyntaxError를 사용합니다.
허용 범위를 벗어난 숫자를 사용할 때 RangeError가 발생합니다.
예를 들어, 길이가 음수인 배열을 생성하면 RangeError가 발생합니다:
try { var arr = new Array(-1); // throws a range error } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }테스트를 보세요‹/›
시도할 때, 존재하지 않는 변수나 객체를 참조하려고 하면, 보통 ReferenceError가 발생합니다.
try { var x == 5 + y; // throw an reference error } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }테스트를 보세요‹/›
如果你的JavaScript代码中有任何语法问题,则会在运行时引发SyntaxError。
try { eval("alert('Hello)"); // Missing ' will throw an error } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }테스트를 보세요‹/›
값이 예상되는 타입이 아닌 경우 TypeError가 발생합니다.
var num = 50; try { num.toUpperCase(); // You cannot convert a number to uppercase } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }테스트를 보세요‹/›
无效의 URI(통합 자원 식별자)를 지정하면 URIError가 발생합니다.
try { decodeURI("%"); // You cannot URI decode percent sign } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }테스트를 보세요‹/›
완전한 속성과 메서드 참조에 대한 정보는 다음을 방문하십시오.JavaScript 오류 참조。
모든 Error 속성과 타입에 대한 설명과 예제가 포함되어 있습니다.