에러 타입
- ReferenceError : 존재하지 않는 변수와 함수를 호출할 때 발생.
- TypeError : 잘못된 형식으로 자료형을 다룰 때 발생.
- SyntaxError : 문법에 맞지 않는 코드를 작성하면 발생. 코드 실행하기 전에 에러 발생시킴.
에러 객체
- 에러가 발생하면, name과 message라는 프로퍼티를 가진 에러 객체가 만들어진다.
- name : 에러 타입
- message : 에러 내용
의도적으로 에러를 만드는 방법
- new 키워드와 에러 객체 이름을 딴 함수를 통해 에러 객체를 만들 수 있다.
- 에러객체를 만든 것이지, 에러를 발생시킨 것은 아니다.
const error = new TypeError('타입 에러가 발생했습니다.');
console.log(error.name); //TypeError
console.log(error.message); //타입 에러가 발생했습니다.
에러를 직접 발생시키는 방법
- throw 키워드를 사용하여 에러를 발생시킨다.
throw error;
에러를 다루는 방법 : try catch문
- try catch 문은 각각의 코드블록으로 이루어져 있으니, 스코프 생각해서 사용할 것.
- 실행이 가능한 코드내에서의 에러를 다룬다. (SyntaxError는 실행이 안됨)
- 실행 가능한 코드에서 발생한 에러를 다루는 과정을 '예외 처리(Exception Handling)'이라고 부른다.
- 프로그램을 멈추지 않고 에러 후의 코드들을 안전하게 실행시킬 수 있다.
- try문에서 발생한 에러 객체가 catch문 첫번째 파라미터로 전달된다.
- try문에서 에러가 발생하지 않으면 catch문의 코드는 실행되지 않는다.
try {
// 동작시킬 코드
console.log('에러 전');
const tooktak = '뚝딱';
console.log(tooktak);
tooktak = 'tooktak'; //이미 지정되어 있는 변수에 다른 값을 넣으려 해서 에러가 발생
const doordie = '두올다';
console.log(doordie);
} catch (error) {
// 위 코드에서 에러가 발생했을 때 동작할 코드
// error 혹은 err 혹은 e로 사용
//
console.log('에러 후');
}
// 결과
// 에러 전
// 뚝딱
// 에러 후
// 에러가 발생한 시점부터는 아무런 동작을 하지 않는다.
// 에러가 catch뒤에 있는 error파라미터로 전달된다.
// console.log(error);
// console.log(error.name);
// console.log(error.message);
// 실제 에러처럼 발생시키려면, console.error(error);
- try catch문 활용
function printMembers(members) {
for (const member of members) {
console.log(member);
}
}
const teamA = ['뚝딱', '두올다', '두잇', '캔두']
printMembers(teamA);
const tooktak = { name : 'tooktak' };
printMembers(tooktak);
// 객체는 for of문을 사용할 수 없어서 에러가 뜬다.
const teamB = ['뚜기', '따기', '도깨비', '방망이']
printMembers(teamB);
위 내용을 아래처럼 변환하면,
function printMembers(members) {
try {
for (const member of members) {
console.log(member);
}
} catch (err) {
console.error(err);
alert(`${err.name}가 발생했습니다.');
}
}
const teamA = ['뚝딱', '두올다', '두잇', '캔두']
printMembers(teamA);
const tooktak = { name : 'tooktak' };
printMembers(tooktak);
// 객체는 for of문을 사용할 수 없어서 에러가 뜬다.
const teamB = ['뚜기', '따기', '도깨비', '방망이']
printMembers(teamB);
// 콘솔에 teamA 다음에 에러 내용이 보여지고 그 후에 teamB의 이름들이 보여진다.
try catch문은 finally라는 코드 블록을 하나 더 가질 수 있다. : finally문
- finally문은 try catch문이 끝난 다음에 최종적으로 실행될 코드를 다룰 때 활용된다.
- try문에서 에러가 발생하지 않는다면 try문의 코드가 실행된 다음에,
try문에서 에러가 발생한다면 catch문의 코드가 실행된 다음에 실행할 코드를 finally문으로 작성한다.
try {
// 실행할 코드
} catch (err) {
// 에러가 발상했을 때 실행할 코드
} finally {
// 항상 실행할 코드
}
- finally문은 try문에서 어떤 코드를 실행할 때, 에러 여부와 상관 없이 항상 실행할 코드를 담고 있다.
function printMembers(...members) {
for (const member of members) {
console.log(member);
}
}
try {
printMembers('뚝딱', '두올다', '캔두');
} catch (err) {
alert('에러가 발생했습니다!');
console.error(err);
} finally {
const end = new Date();
const msg = `코드 실행을 완료한 시각은 ${end.toLocaleString()}입니다.`;
console.log(msg);
}
- finally문에서 에러가 발생할 경우에는 다시 catch문으로 넘어가지 않는다.
- 만약 finally문에서도 에러 처리가 필요하다면, try catch문을 중첩해서 활용해야 한다.
try {
try {
// 실행할 코드
} catch (err) {
// 에러가 발상했을 때 실행할 코드
} finally {
// 항상 실행할 코드
}
} catch (err) {
// finall문에서 에러가 발생했을 때 실행할 코드
}
728x90
'코딩도 합니다 > JS' 카테고리의 다른 글
[자바스크립트 js] 배열 메소드 forEach / map (0) | 2021.06.11 |
---|---|
[자바스크립트 js] 프로퍼티 표기법 (0) | 2021.06.10 |
[자바스크립트 js / 실무 기록] appendChild, setAttribute 실무 / ajax 실무 (0) | 2021.06.10 |
[자바스크립트 js / 실무 기록] 클릭할 때마다 객체 추가 되지 않게 하는 법 (중복 추가 방지) (0) | 2021.06.10 |
[자바스크립트 js / 실무 기록] 콘솔창에 로그 안 보이게 하는 법 (0) | 2021.06.10 |