혼자공부하는자바스크립트 책 위주의 내용입니다
💡 괄호의 짝을 맞추지 않거나, 문자열을 열었는데 닫지 않았다거나 했을 때 발생하는 오류
조건문을 사용해서 예외가 발생하지 않게 만드는 것을 기본 예외 처리라고 한다.
querySelector() 메소드로 추출된 문서 객체가 없는 경우
💡 예외를 조금 더 쉽게 잡을 수 있는 기능 try catch finally 구문.
try, catch, finally 기본 형태
//기본 형태
try {
// 예외 발생할 가능성이 있는 코드
} catch {
//예외 발생 시 실행됨
} finally {
//무조건 실행 finally는 필요할 때만 사용한다.
}
try, catch, finally 사용해보기
<script>
try {
HangHaeHaeHae();
console.log("항해 개 힘들져");
} catch {
console.log("항해99일 999일 같네");
} finally {
console.log("9기 프론트엔드 모두 홧팅!");
}
</script>
무조건 실행되기에!
예외 처리 구문 내부에서 return 사용하기 (1)
const test = () => {
try {
consol.log("Test"); //일부러 오타임
} catch(err) {
console.error(err);
return;
}
console.log('출력되었으면 좋겠어')
}
test();
catch
에서 return
이 되어 출력되지 않는다.예외 처리 구문 내부에서 return 사용하기 (2)
const test = () => {
try {
consol.log("Test"); //일부러 오타임
} catch(err) { //err은 예외 객체라고 한다.
console.error(err);
return;
} finally {
console.log('출력되었으면 좋겠어')
}
}
test();
console.log
와 console.error
의차이💡 catch 괄호 안에 입력하는 식별자를 예외 객체 (exception object)라고 한다. 보통 e, exception 식별자를 쓴다.
function test() {
try {
hanghae();
} catch (e) {
console.log(e);
console.log(e.name); // ReferenceError 참조에러
console.log(e.message); //hanghae is not defined
}
test();
💡 예외를 강제 발생시킬때는
**throw
** 키워드를 사용한다.
throw 문자열 //간단한 예외 발생
throw new Error(문자열) //자세한 예외 발생
예외 강제로 발생시키고 잡기 (throw 와 throw new Error 차이)
function divide(a, b) {
if (b === 0) {
throw "0으로 나눌수 없습니다.";
}
return a / b;
}
console.log(divide(10, 2));
console.log(divide(10, 0));
function divide(a, b) {
if (b === 0) {
throw new Error("0으로 나눌수 없습니다라다닷");
}
return a / b;
}
console.log(divide(10, 2));
console.log(divide(10, 0));
강제로 예외를 발생시키는 이유
자바스크립트가 다른 언어에 비해 예외를 많이 발생시키지 않기 때문에, 사용자에게 함수를 잘못 사용했다는 것을 강제로라도 인지시켜줄 필요가 있을 때 사용한다.
💡 자바스크립트는
Error
SyntaxError
ReferenceError
TypeError
등의 표준 에러 객체 관련 생성자를 지원합니다. 이 생성자들을 이용해 에러 객체를 만들 수도 있다.
try {
console.log(JSON.parse("{전혀 JSON.parse가 안되는 문자열}"));
} catch (e) {
console.log(e.name); // SyntaxError
console.log(e.message); // Expected property name or '}' in JSON at position 1
}
<script>
let json = '{ "age": 30 }'; // 불완전한 데이터
try {
let user = JSON.parse(json); // <-- 에러 없음
console.log(user); // { age : 30 }
if (!user.name) {
throw new SyntaxError("불완전한 데이터: 이름 없음"); // (*)
}
console.log(user.name); // 찍히지도 않음
} catch (e) {
console.log("JSON Error: " + e.message); // JSON Error: 불완전한 데이터: 이름 없음
}
</script>
<script>
let json = '{ "age": 30 }'; // 불완전한 데이터
try {
let user = JSON.parse(json); // <-- 에러 없음
console.log(user); // { age : 30 }
if (!user.name) {
throw "불완전한 데이터: 이름 없음"; // (*)
}
console.log(user.name); // 찍히지도 않음
} catch (e) {
console.log("JSON Error: " + e); // JSON Error: 불완전한 데이터: 이름 없음
}
</script>
참고자료
JSON.parse()
JSON.parse() - JavaScript | MDN
JSON.stringify()
JSON.stringify() - JavaScript | MDN
try..catch와 에러 핸들링