자바스크립트는 예외를 다룰 수 있는 메커니즘을 제공한다.
◎ throw
throw 문은 함수의 실행을 중단한다.
어떠한 예외인지 알려주는 name 속성과, 설명을 위한 message 속성을 가진 객체를 반환해야 한다.
필요한 경우 속성을 더 추가할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 | 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 절에 전달된다.
1 2 3 4 5 6 7 8 9 10 11 12 | 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 를 우선 실행한다. )