상세 컨텐츠

본문 제목

[자바스크립트] 컴퓨터가 인지 못하는 에러 던지기

카테고리 없음

by esoesmio 2023. 5. 16. 01:42

본문

// 특정 월의 당번으로 지원하는 함수
function applyForMonth (date) {
    try {
        if (typeof date !== 'number') {
            throw new TypeError('숫자로 입력해주세요.');
        }
        if (date < 1 || date > 12) {
            throw new RangeError('유효한 월을 입력해주세요.');
        }

        console.log(`${date}월 당번으로 등록되셨습니다.`);

    } catch (e) {
        console.error('🛑 에러 발생!', e);
        console.log('다시 등록해주세요.');
    }
}
applyForMonth(5);applyForMonth('5');

 

 

 

군대 에러

 

 

class MilitaryError extends Error {
    constructor (position, ...params) {
        super(...params);

        this.name = 'MilitaryError';

        switch (position) {
            case '이병':
                this.message = '개판이군. 맞선임 데려와봐.';
                break;
            case '일병':
                this.message += ' 엎드려 뻗쳐.';
                break;
            case '상병':
                this.message = '짬을 거꾸로 먹었나. ' + this.message;
                break;
            default:
                this.message = '집에 갈 때 됐다 이거지? ㅎㅎ';
        }
    }
}

class Soldier {
    constructor (position) {
        this.position = position;
    }

    speak (word) {
        console.log(this.position + ':', word);
        try {
            if (!'다나까'.includes(word.at(-1))) {
                throw new MilitaryError(
                    this.position,
                    '군대에서 모든 말은 다나까로 끝낸다.'
                );
            }

        } catch (e) {
            console.error(e);
        }
    }
}

['이병', '일병', '상병', '병장'].forEach(pos => {
    const soldier = new Soldier(pos);
    soldier.speak('무슨 일입니까');
    soldier.speak('왜요');
});

 

에러 버블링

function func1 () {
  throw new Error('에러');
}

function func2 () {
  func1();
}

function func3 () {
  func2();
}

function func4 () {
  try {
    func3();

  } catch (e) {
    console.error(e);
  }
  console.log('실행완료');
}

func4();

 

 

 

전원집합 회사 에러코드

 

 

function func1 (e) { // 사원
    try {
        if (e) { throw e }
        console.log('저 가 봐도 되죠?');
        console.log('- - - - - - - - - -');

    } catch (e) {
        if (e instanceof SyntaxError) {
            console.error('저 이건 알아요!', e);
            console.log('- - - - - - - - - -');
            return;
        }
        console.log('대리님, 이거 뭐에요?');
        throw e; // 💡 처리하지 못하는 에러는 윗선으로 던짐
    }
}

function func2 (e) { // 대리
    try {
        func1(e);
    } catch (e) {
        if (e instanceof TypeError) {
            console.error('내가 할 테니 가봐요.', e);
            console.log('- - - - - - - - - -');
            return;
        }
        console.log('부장님, 이건 제 선에서 안 되겠습니다.');
        throw e;
    }
}

function func3 (e) { // 부장
    try {
        func2(e);
    } catch (e) {
        if (e instanceof ReferenceError) {
            console.error('잘 하자, 응?', e);
            console.log('- - - - - - - - - -');
            return;
        }
        console.log('사장님, 이것 좀 보셔야겠습니다.');
        throw e;
    }
}

function func4 (e) { // 사장
    try {
        func3(e);

    } catch (e) {
        console.error('전원 집합.', e);
    }
}


// func4();

// func4(new SyntaxError());
//
func4(new TypeError());
// func4(new ReferenceError);
//
// func4(new RangeError);

댓글 영역