json이 문법적으로 잘못되진 않았지만, 스크립트 내에서 사용 중인 필수 프로퍼티 name을 가지고 있지 않을 경우 예시를 들어보겠습니다.

let json = '{"age": 30 }';// 불완전한 데이터
try {
	let user = JSON.parse(json); // <-- 에러 없음
	alert(user.name); // <-- 에러 발생, 이름 프로퍼티가 없음
} catch (e) {
	alert("실행되지 않습니다.");
}

위 예시에서 JSON.parse 는 정상적으로 실행되었지만 name이 없는 건 에러를 유발하는 상황입니다. 이제 throw 연산자를 사용해 에러 처리를 통합해 보도록 하겠습니다.

throw 연산자

*throw 연산자는 에러를 생성합니다.*

throw <error object>

이론적으로는 숫자, 문자열 같은 원시형 자료를 포함한 어떤 것이든 에러 객체(error object)로 사용할 수 있습니다. 하지만 내장 에러와의 호환을 위해 되도록 에러 객체에 namemessage 프로퍼티를 넣어주는 것을 권장합니다.

JavaScript는 Error, SyntaxError, ReferenceError, TypeError 등의 표준 에러 객체 관련 생성자를 지원합니다. 이 생성자들을 이용해 에러 객체를 만들 수도 있습니다.

let error = new Error(message);
let error = new SyntaxError(message);
let error = new ReferenceError(message);
// ...

일반 객체가아닌 내장 생성자를 사용해 만든 내장 에러 객체의 name 프로퍼티는 생성자 이름과 동일한 값을 갖습니다. 프로퍼티 message의 값은 인수에서 가져옵니다.

let error = new Error("이상한 일이 발생했습니다.");

alert(error.name);   // Error
alert(error.message);// 이상한 일이 발생했습니다.

잘못된 데이터를 받았을 때, JSON.parse가 어떤 종류의 에러를 만들어내는지 아래 코드를 통해 살펴봅시다.