예외 처리를 위해 JavaScript에서 try...catch를 사용할 수 있습니다. 예:
try { foo.bar( );} catch (e) { Alert(e.name ": " e.message);}
현재 우리가 받을 수 있는 시스템 예외에는 주로 다음 6가지 유형이 있습니다.
EvalError: eval()에서 코드를 실행할 때 오류가 발생할 때 발생
RangeError: 숫자 변수나 매개변수가 유효한 범위를 벗어날 때 발생
ReferenceError: 유효하지 않은 참조를 역참조할 때 발생
SyntaxError : eval()에서 코드를 구문 분석하는 동안 구문 오류가 발생할 때 발생
TypeError: 변수나 매개변수가 유효한 유형이 아닐 때 발생
URIError: encodeURI() 또는 decodeURI()에 잘못된 매개변수가 전달될 때 발생
위 6개의 예외 개체는 모두 Error 개체에서 상속됩니다. 모두 다음 두 가지 생성 방법을 지원합니다.
new Error();new Error("Exception information")
수동으로 예외를 발생시키는 방법은 다음과 같습니다.
try { throw new Error("Whoops!");} catch (e) { 경고 (e.name ": " e.message);}
예외 메시지 유형을 확인하려면 catch에서 확인할 수 있습니다.
try { foo.bar();} catch(e) { if (e 인스턴스of EvalError) { 경고(e. 이름 ":" e.message) } else if (e 인스턴스of RangeError) { 경고(e.name ": " e.message) } // etc }
오류에는 다음과 같은 주요 속성이 있습니다.
설명: 오류 설명(IE에서만 사용 가능)
fileName: 오류 파일 이름(Mozilla에서만 사용 가능): 오류 줄 번호(Mozilla에서만 사용 가능)
메시지: 오류 메시지(IE의 설명과 동일)
이름: 오류 유형
번호: 오류 코드(IE에서만 사용 가능). : Java의 스택 추적과 같은 오류 스택 정보(Mozilla에서만 사용 가능)
따라서 오류 메시지를 더 잘 이해하기 위해 catch 부분을 다음 형식으로 변경할 수 있습니다.
try { foo.bar();} catch (e) { if (browserType != BROWSER_IE) {
alert("name: " e. name "message: " e.message "lineNumber: " e.lineNumber "fileName: " e.fileName "stack: " e.stack)
} else {
alert("name: " e.name " errorNumber: " (e.number & 0xFFFF ) "message: " e.message");
} }
JavaScript의 throw 명령은 실제로 어떤 객체든 던질 수 있으며, 우리는 이 객체를 catch에서 수신합니다. 예:
try { throw new Date( ); // 현재 시간 객체를 던집니다.} catch (e) { Alert(e.toLocaleString()) // 현재 시간을 표시하기 위해 로컬 형식을 사용합니다.}