<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>자바스크립트 예외처리</title>
</head>
<body>
<h1>자바스크립트 예외처리 </h1>
<h2>개요</h2>
<p>자바스크립트에서 오류는 try ~ catch 문을 통해 관리할 수 있음</p>
<p>코드의 실행을 중단시키는 오류는 크게 2가지가 존재
: 문법적 오류, 실행상 오류</p>
<p>자바스크립트에서는 실행상 오류만 예외처리 가능</p>
<!--SyntaxError 는 문법상의 오류라 try catch 불가능-->
<script>
document.write(10 / 0, '<br>');
try {
document.write(user);
} catch (e) { // 오류발생시 관련정보는 e 에 저장
document.write('오류발생', '<br>') ;
document.write(e, '<br>'); //오류종류, 메시지
document.write(e.name, '<br>'); //오류종류
document.write(e.message, '<br>'); //오류메세지
document.write(e.stack, '<br>'); //오류종류, 메세지 , 위치
} //오류발생시 오류정보 확인
try {
document.write(user);
} catch {
document.write('오류발생@@!!, <br>')
} //오류발생시 예외처리만 수행
</script>
<h2> 유형별 예외처리 </h2>
<p>오류 유형별로 메세지 처리를 상이하게 하고 싶으면 instanceof 객체를 사용하면 됨 </p>
<p>referenceError : 변수 선언과 관련된 오류 </p>
<p>rangeError : 범위와 관련된 오류 </p>
<p>syntaxError : 문법과 관련된 오류 </p>
<p>typeError : 변수나 객체의 자료형과 관련된 오류 </p>
<script>
try {
document.write(abc) ;
} catch (e) {
if (e instanceof ReferenceError) {
// A instanceof B : A는 B의 객체인가? (상속관계)
// 즉, A가 B 클래스와 관련(상속관계) 있는가?
document.write('오류 : 변수를 선언하세요!');
}
}
</script>
<h2> 인위적으로 오류발생시키기</h2>
<p>특정 코드에 의해 발생되는 오류외에도
로직이 정상적으로 수행되는 특정조건을
만족하지 못했을 때 의도적으로 오류를 발생시켜
catch블럭에 의해 예외처리를 해야할 경우가 있음</p>
<p>이때 'throw 오류객체명' 구문으로 오류를 발생시킬 수 있음 </p>
<hr>
<script>
let age = 150 ;
let checkAge = (age) => {
if (age < 0 || age > 120 )
throw new RangeError;
}; //입력값이 0 미만, 120초과시 인위적으로 오류 발생하도록
try {
checkAge(age);
} catch (e) {
if (e instanceof RangeError)
document.write('나이는 정상범위가 아님!');
}
</script>
<hr>
<script>
try {
new Array(10000000000);
//Array(생성할 배열갯수)
} catch (e) {
if (e instanceof RangeError)
document.write('숫자가 정상범위가 아님!');
}
</script>
</body>
</html>