본문 바로가기

WEB/JavaScript

Js - 예외 처리 (try ~ catch)

<!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>

'WEB > JavaScript' 카테고리의 다른 글

Js - regexp 정규표현식  (0) 2022.06.13
Js - AJAX  (0) 2022.06.10
Js - 내장 함수 2  (0) 2022.06.10
Js - 내장 함수 1  (0) 2022.06.09
Js - 함수  (0) 2022.06.09