Javascript와 에러 Error

박성룡 ( Andrew park )
3 min readApr 29, 2019

--

자바스크립트를 처음부터 다시 공부해보려고 한다.

프로그램 동작 중 발생되는 문제를 제어하기 위해서 에러가 존재한다.

에러가 발생되면, 이후 모든 작업은 중단되고, 에러 처리가 우선 된다.

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

--

--