오류는 프로그램이나 코드에서 뭔가 잘못되었거나 예상치 못한 일이 있을 때 그 사실을 알려 주는 데 유용해요.
오류는 JavaScript 객체예요.
이 객체의 주요 속성은 message예요.
const error = new Error('Oops, something went wrong');
console.log(error.message);
// => "Oops, something went wrong"
throw 문법을 사용하면 Error 객체를 던질 수 있어요.
throw new Error('Oops');
오류가 던져지면 현재 실행이 중단되고, 호출 스택의 첫 번째 catch 블록에서 다시 이어서 실행돼요.
try {
throw new Error('Oops');
} catch (error) {
console.log(error.message);
// => "Oops"
}
JavaScript의 다른 클래스와 마찬가지로, extends 키워드를 사용하면 Error를 상속해서 사용자 정의 오류를 만들 수 있어요.
instanceof 문법은 잡은 오류가 Error의 특정 하위 클래스의 인스턴스인지 확인해요.
class CustomError extends Error {}
try {
// ... Code that may throw an error
} catch (error) {
if (error instanceof CustomError) {
console.log('The error thrown is an instance of the CustomError');
}
}
Error 객체 외에도 다른 내장 오류 객체들이 있어요. 자세한 내용은 여기에서 확인할 수 있어요.
내장 오류 타입 중 하나를 상속하는 클래스를 만들면 사용자 정의 오류 타입을 직접 정의할 수도 있어요.
class MyCustomError extends Error {}
throw 문법은 보통 Error 객체를 던질 때 사용하지만, JavaScript는 유연해서 string, null 또는 어떤 원시 타입이든 던질 수 있어요.
JavaScript 표준은 아니지만, 대부분의 JavaScript 환경은 Error 객체에 stack 속성을 구현하고 있어서, 던져진 오류의 스택 트레이스를 얻을 수 있어요.