에러를 직접 생성하고 에러를 활용할 수 있다.
const love = new TypeError('에러발생!')
console.log(love.name)
console.log(love.message)
//TypeError
//에러발생!
new라는 키워드에 에러객체에 원하는 메세지를 넣으면 에러 객체를 생성할 수 있다.
const love = new TypeError('에러발생!')
throw love
console.log(love.name)
console.log(love.message)
//TypeError: 에러발생!
위는 단순 에러 객체를 만들었고 진짜 에러를 발생시키고 싶다면 throw를 활용하여 진짜 에러를 발생시킬수 있다.
try와 catch 를 활용할 수 있다.
try {
// 기본 코드
console.log('코드 진행')
const you = '천재'
console.log(you)
you = '천재' //에러 부분
const me = '현재'
console.log(me)
} catch (error) {
//에러가 발생했을 때 동작하는 코드
console.log('에러 발생 하면')
}
try는 코드가 진행되는 부분이고 여기서 에러가 발생한다면 catch문의 코드가 진행된다.
이때 try문에서 에러가 발생한 다음 코드는 진행되지 않는다.
catch문의 파라미터는 보통 error나 err로 표시되며 어떤 이름을 주어도 상관없다.
기존에 만든 에러 객체는 이 파라미터로 들어간다.
catch(err) {
console.error(error)
console.log(error.name)
console.log(error.message)
}
위와 같이 error를 볼 수 있고 log 메소드 대신 error 메소드를 쓴다면 실제 에러표시와 같이 표기된다.
function sortFood(foods) {
for (const food of foods) {
console.log(food)
}
}
const western = ['파스타', '피자', '스프'];
sortFood(western);
const korean = {name : '잡채'};
sortFood(korean);
const japanese = ['냉모밀', '오꼬노미야키', '미소된장국'];
sortFood(japanese);
중간 함수는 객체를 받는데 for of 함수는 객체를 받을 수 없어 에러가 발생하게 된다.
그러면 western만 나타나고 korean과 japanese는 나타나지 않는다.
이때 try catch문을 활용할 수 있다.
function sortFood(foods) {
try {
for (const food of foods) {
console.log(food)
}
} catch (err) {
console.error(err)
alert(` ${err.name}이 발생했습니다.`)
}
}
const western = ['파스타', '피자', '스프'];
sortFood(western);
const korean = {name : '잡채'};
sortFood(korean);
const japanese = ['냉모밀', '오꼬노미야키', '미소된장국'];
sortFood(japanese);
위와 같이 try catch 문으로 작성한다면 western - error - japanese 순으로 나타난다.
1) try와 catch는 각각의 코드 블록이기 때문에 try나 catch에서 사용한 변수는 외의 요소에서 사용할 수 없다. 블록 내에서 스코프를 생각해야한다.
2)실행이 가능한 코드 내 에러를 다룬다. syntax error 같은 것은 다루지 않는다.
2-1) 실행이 가능한 코드는 예외(exception) 이라고 부른다. 이를 다루는 것은 예외처리(exceptin handling)이라고 한다.
finally 문은 try catch 문이 종료된 후 최종적으로 실행된 코드를 나타낸다.
try {
// 실행할 코드
} catch (err) {
// 에러가 발생했을 때 실행할 코드
} finally {
// 항상 실행할 코드
}
순서는 try -> finally 순이며 오류가 발생하면
try -> catch -> 남은 try -> finally 순서대로 진행된다.
try {
try {
// 실행할 코드
} catch (err) {
// 에러가 발생했을 때 실행할 코드
} finally {
// 항상 실행할 코드
}
} catch (err) {
// finall문에서 에러가 발생했을 때 실행할 코드
}
finally문 내에서 에러가 발생하면 중첩을 통해 활용할 수 있다.