자바스크립트의 '약형'언어로서의 성질이 보여주는 관대함은 때론 불편을 야기하기도 한다. 예를 들어 사용자로부터 숫자만을 입력받고 싶음에도 사용자가 숫자가 아닌 문자열을 입력해도 자바스크립트는 에러를 발생시키지 않는다. 이러한 경우 개발자는 throw 와 try - catch을 함께 이용해, 자체저으로 오류를 정의하고 처리할 수 있다.
const enteredValue = prompt("Maximum life for you and the monster.", "100");
let chosenMaxLife = parseInt(enteredValue);
if (isNaN(enteredValue) || enteredValue <= 0) {
chosenMaxLife = 100;
}
기존 코드를 try - catch문을 이용해 수정해보겠다. 기존 코드에서 사용자가 숫자가 아니거나 0 이하의 수를 입력하였을 경우 조건문을 활용해 Life 를 100으로 강제하였다. 물론 이러한 방식도 오류를 해결하는 방법이 맞지만, try - catch문을 활용할 수 도 있다.
if (isNaN(enteredValue) || enteredValue <= 0) {
throw { message: "you have to enter value that is number more than 0" };
}
throw 키워드를 사용하면 사용자가 원하는 타입의 오류를 마음껏 만들 수 있다. throw 키워드 뒤에 문자열, 숫자, 배열 등을 기입할 수 있으며, 국룰은
{message : "오류 내용"}
과 같은 객체를 내보내는 것이다. 이 상태로 조건식에 만족하는 입력을 하게 되면 다음과 같은 로그를 출력한다.

명백한 오류 메시지이다. 그리고 여기 Uncaught이라는 키워드가 등장하는데, 이는 try - catch 문에 의해 오류를 잡지 못함을 의미한다.
try {
if (isNaN(enteredValue) || enteredValue <= 0) {
throw { error: "you have to enter value that is number more than 0" };
}
} catch (error) {
console.log(error);
enteredValue = 100;
}
위 코드는 try - catch문에 의해 내가 정의한 오류를 잡는 모습이다.
try 블럭 안에는 오류를 발생할 수 있는 내용이 들어가고, catch 블록 안에는 오류 발생 시 실행할 내용을 작성한다. finally 키워드도 존재하는데, 이는 오류 발생 유무와 상관없이 항상 실행할 내용이 들어가고, 자주 쓰이진 않는다.
catch 이후 괄호에는 오류 객체를 담기 위한 식별자라고 생각하면 된다. 즉 아무거나 작성해도 된다.
따라서 다음 코드를 실행하면

보이는 것처럼 오류 메시지가 아니라 console.log()에 의한 단순한 출력메시지이다. 오류가 잡힌 것이다.
이와 같이 throw 와 try-catch 문을 사용하면 의도적으로 오류를 발생시켜 오류 로그를 남기는 동시에, 오류 발생으로 인한 스크립트 작동 중지 상황을 예방할 수 있다.
try - catch문을 모든 오류가 발생할 수 있는 상황에 사용하기엔 쉽지 않다. 주로 네트워크 오류와 같이 제어할 수 없는 오류에 대해서 사용하면 좋다.