- 자바스크립트는 프로그램 실행중 에러가 발생하면 프로그램을 중단하고, 에러객체를 콘솔에 찍어준다.
- 에러객체는 name, message 프로퍼티가 있다.
아래는 가장 흔하게 볼 수 있는 에러이다.
- referenceError
- typeError
- syntaxError
이 중 syntaxError는 아예 프로그램을 시작하기 전부터 에러라고 알려준다.
의도적으로 에러객체 만들어서 에러내기
1. 에러 객체 생성
const error = new TypeError(‘타입에러가 발생했다.’);
console.log(error.name);
console.log(error.message);
2. 에러 발생
throw error;
에러핸들링
try catch문
try{
// 코드
} catch(error){
// 에러가 발생했을 때 동작할 코드
} finally{
// 항상 실행할 코드
}
- try문안에서 에러가 발생한 경우, 그 아래의 코드는 동작하지 않고 바로 catch문으로 넘어간다.
- catch문에서는 발생한 에러객체를 마라미터로 받고, console.error(error)을 통해서 평소보던 에러 모습으로 콘솔에 남길 수 있다.
- finally문은 에러의 발생여부와 상관없이 항상 실행된다.
try{
console.log(‘first’);
const animal = ‘dog’;
animal = ‘cat’;
console.log(‘second’);
} catch(e){
console.log(‘에러 발생’);
console.error(e);
}
위 코드의 결과는 아래와 같다.
first
에러발생
TypeError: Assignment to constant variable(에러객체)
만약 animal='cat'; 부분을 주석처리하고 실행한다면(에러를 제거한다면) 결과는 아래와 같다.
first
second
try catch문 활용하기
- 에러가 발생해도 프로그램을 중단시키지 않을 수 있다.
- try catch문은 실행이 가능한 에러를 다루는데, (syntax에러는 실행 불가능 에러이므로 다룰 수 없다.)
- 실행 가능한 에러를 예외(exception)이라고 부르며
- 실행가능한 에러를 다루는 것은 예외처리(exception handling)이라고 부른다.
function printAnimals(animals){
for(cont animal of animals){
console.log(animal);
}
}
const firstAnimals = [‘dog’, ‘cat’, ‘duck’, ‘mouse’];
printAnimals(firstAnimals);
const secondUser = { name: ‘Ann’ };
printAnimals(secondUser);
const secondAnimals = [‘chicken’, ‘rabbit’, ‘cow’];
printAnimals(secondAnimals);
위의 코드는 printAnimals(secondUser); 부분에서 에러가 발생하기때문에, secondAnimals라는 변수는 생성이 되지 않는다.
따라서 secondAnimals를 아규먼트로 넣은 함수도 실행되지 않는다.
에러가 발생했음을 알려주고, 중단없이 프로그램을 실행시키려면 아래와 같이 작성한다.
function printAnimals(animals){
try{
for(cont animal of animals){
console.log(animal);
}
} catch(err){
console.error(err);
alert(`${err.name}에러가 발생했습니다.`);
}
}
이렇게하면 중단없이 secondAnimals도 잘 출력된다.
finally문에서 발생하는 에러 잡기
try{
try{
// 실행할 코드
} catch(err){
// 에러가 발생했을 때 실행할 코드
} finally{
// 항상 실행할 코드
}
} catch(err){
finally문에서 에러가 발생했을 때 실행할 코드
}
위와같이 try catch문을 이중으로 사용할 수 있다.
'JavaScript' 카테고리의 다른 글
JavaScript - 모듈화 (0) | 2023.10.11 |
---|---|
JavaScript - 배열 함수 및 유용한 내부 기능 (0) | 2023.10.11 |
JavaScript - 구조분해 (0) | 2023.10.11 |
JavaScript - 객체의 프로퍼티 (0) | 2023.10.11 |
JavaScript - Spread (0) | 2023.10.11 |