자바스크립트는 예외를 다룰 수 있는 메커니즘을 제공한다.
◎ throw
throw 문은 함수의 실행을 중단한다.
어떠한 예외인지 알려주는 name 속성과, 설명을 위한 message 속성을 가진 객체를 반환해야 한다.
필요한 경우 속성을 더 추가할 수 있다.
function mul(a,b){ if(typeof a !== 'nunmber' || typeof b !== 'nunmber' ){ throw{ name : 'TypeError', message : 'function mul needs numbers', args : a + ", " +b }; } return a * b; } mul(1,"string"); // Uncaught {name: "TypeError", message: "function mul needs numbers", args: "1, string"}
◎ try / catch / finally
throw 문에서 반환한 예외 객체는 try 문의 catch 절에 전달된다.
function tryMul(){ try { mul(1,"string") } catch(e) { // throw 에서 반환한 객체를 e로 받음 console.log(e); } finally { console.log("finally"); } } tryMul(); // {name: "TypeError", message: "function mul needs numbers", args: "1, string"} // finally
finally 절은 try 절의 뒷정리에 사용되는 코드 블록이다.
try 절의 마지막으로 프로그램 제어가 도달한 뒤, finally 절로 이동한다.
try 블록이 일부라도 실행되는 경우 finally 블록의 실행은 보장된다.
( try 에서 return, continue, break 로 제어가 빠져나가는 경우에도 finally 를 우선 실행한다. )