"코드가 실행조차 되지 않는 오류"
와 "코드 실행 중간에 발생하는 오류"
두가지가 있다.<script>
console.log('프로그램 시작')
console.log("괄호를 닫지 않으면 구문 오류가 발생한다."
</script>
Uncaught SyntaxError: missing ) after argument list (at a.html:10:17)
라는 에러 메세지가 문제가 생긴 위치와 함께 콘솔에 뜬다.console.log('프로그램 시작')
조차 실행되지 않는다.<script>
console.log('프로그램 시작')
console.rog("log 스펠링이 틀리면 해당 코드는 함수(console.log())가 아니기 때문에 타입 에러 오류가 발생한다.");
</script>
Uncaught TypeError: console.rog is not a function at a.html:11:13
라는 에러 메세지가 생성된다.console.log('프로그램 시작')
은 실행되지만, 틀린 문법 부분은 실행되지 않는다.Type Error, Reference Error, Range Error
<script>
document.addEventListener('DOMContentLoaded', () => {
const h1 = document.querySelector('h1')
if(h1) {
h1.textContent = '안녕하세요'
} else {
console.log('h1 태그를 추출할 수 없습니다.')
}
})
</script>
try {
// 예외가 발생할 가능성이 있는 코드
} catch (exception) {
// 예외가 발생했을 때 실행할 코드
} finally {
// 무조건 실행할 코드
}
<script>
try{
willExcept.bye()
console.log('try 구문의 마지막 줄')
// 일부로 발생시킨 에러 혹은, 예외가 발생할 가능성이 있는 코드
} catch (exeption) {
console.log('catch 구문의 마지막 줄')
// try 구문 내부에서 에러가 발생한다면 해당 부분의 구문을 실행하지 않고 catch 내부에 있는 구문을 대신 실행한다.
// try 구문 내부에 에러가 없다면, try 부분이 정상적으로 출력된다.
} finally {
console.log('finally 구문의 마지막 줄')
// try나 catch와 상관없이 실행될 내용
}
</script>
<script>
function test () {
try {
alert('try')
throw // 예외를 강제로 발생 시키는 키워드
} catch (exception) {
alert('catch')
return // return 키워드 이후에 나오는 코드는 출력이 안되는게 정상이지만,
} finally { // finally 구문이 등장하면 코드가 실행된다.
alert('finally')
}
} // 결과적으로 console에 try, catch, finally 라는 문구가 모두 실행된다.
</script>
정보를 확인할 수 있게 하는 것이 "예외 객체 (exception object)" 다.
try catch 구문 사용 시 catch 괄호 안에 입력하는 식별자가 예외 객체다.
e
혹은 exception
이라는 식별자 이름을 사용한다.<script>
try {
const arr = new Array(99999999999999);
// 1. 자바스크립트의 배열 크기는 4,294,967,295까지 가능하기 때문에 오류 발생
// (RangeError: Invalid array length at a.html:11:19)
} catch (exception) {
// 2. try 구분에서 오류가 났기 때문에 catch 구문에 있는 부분이 실행된다.
console.log(`예외 이름: ${exception.name}`);
// 3. 예외 이름: RangeError
console.log(`예외 메세지: ${exception.message}`);
// 4. 예외 메세지: Invalid array length가 각각 콘솔에 출력된다.
}
</script>
예외를 강제로 발생 시킬땐 throw 키워드를 사용한다.
throw
사용 시, Uncaught 문자열
형식으로 메세지가 출력되고,
throw new Error ('문자열')
사용 시 Uncaught Error: 문자열 at 파일이름: 줄 번호
형식으로 에러 메세지가 출력된다.
<script>
function divide(a, b) {
// 1. 숫자를 나눌 수 있는 특정 함수를 설정 하고,
if (b === 0) {
// 2. 원래 N/0 의 값은 Infinity로 출력되지만 에러메세지를 출력하고 싶을 때,
throw "0으로 나눌 수 없습니다.";
// 3. 0 으로 나눌 경우 특정 에러 메세지가 뜨도록 throw 키워드를 이용해서 설정한다.
} else {
return a / b;
// 4. 0으로 나누는 조건이 아니면 본래 의도대로 a/b의 값을 출력한다.
}
}
console.log(divide(10, 2)); // 정상적으로 숫자 5가 출력된다.
console.log(divide(10, 0)); // Uncaught 0으로 나눌 수 없습니다. 라는 문구가 출력된다.
</script>