Javascript와 에러 Error
자바스크립트를 처음부터 다시 공부해보려고 한다.
프로그램 동작 중 발생되는 문제를 제어하기 위해서 에러가 존재한다.
에러가 발생되면, 이후 모든 작업은 중단되고, 에러 처리가 우선 된다.
Javascript 는 인터프린트 언어이기 때문에, 브라우저가 Javascript 해석중 에러가 발생되면, 해석이 중단된다.
해석이 완료된 이후의 동작중에 에러가 밸생된다면, 해당 동작은 중단된다.
Javascript 에서 에러가 발생된다면, 모든 에러는 console 에 error로 기록된다.
모든 에러는 Error 이벤트가 발생되게 된다.
Error 객체
Error 객체는 런타임 오류가 발생되면, 생성된다.
Error 는 브라우저마다 prototype 이 다를 수 있지만 message는 보통 포함한다.
new Error('메시지')
에러는 new Error() 나 Error() 로도 직접 생성할 수 있다.
Error 타입
Error 는 방식에 따라 여러 Error 타입이 존재한다.
SyntaxError
Javascript에서 발생된 문법 에러이다.
vars a = 10;
// Uncaught SyntaxError: Unexpected identifier
RangeError
허용한 범위를 넘는 값을 적용하려고 할 때 발생한다.
new Date('2014–25–23').toISOString();
// Uncaught RangeError: Invalid time value
ReferenceError
잘못된 값을 참조하려고 할 때 발생한다.
test()
// Uncaught ReferenceError: test is not defined
TypeError
해당 값이 원하는 형식의 타입이 아닐 때 발생한다.
window.test()
// Uncaught TypeError: window.test is not a function
URIError
URI 형태가 올바르지 않을때 발생한다.
decodeURIComponent('%');
// Uncaught URIError: URI malformed
EvalError
evel() 메서드에서 에러가 발생할때 때 발생한다.
try … catch … finally
에러가 발생되면 모든 동작이 중단되기 때문에, 예외 처리 문법을 통해 동작을 이어나갈 수 있다.
catch 의 argument 로 발생된 Error 객체를 받게된다.
throw
throw 연산자를 이용해서 언제든지 에러를 반환할 수 있다.
반드시 Error 객체를 반환해야하는 것은 아니다.
Promise 에러
Promise 스코프 내에서 발생된 에러는 외부 스코프의 try catch 가 감지하지 못한다.
때문에 Promise 에서 에러가 발생하거나, Rejection 으로 발생시키면, Promise.prototype.catch 에서 에러를 확인할 수 있다.
async/await 에러
async /await 문법은 try catch 로 에러를 확인할 수 있다.
element 에러 핸들러
onerror 이벤트 핸들러를 통해 에러를 catch 할 수 있다.
<img src='error.jpg' onerror="this.src = 'fail.jpg'" />
<script src='error.js' onerror="console.error('error')"></script>
error stack
에러 로그는 발생된 곳 부터 전역까지 순서대로 스택을 보여준다.
크롬과 오페라에서는 스택은 기본 10개 까지로 설정되어 있다.
사파리에서 스택은 기본 100개 까지로 설정되어 있다.
Error.stackTraceLimit === 10