INDEX
エラーオブジェクトとは?

JavaScriptでは、エラーが発生したときにエラーオブジェクト(Error Object)が作成されます。エラーオブジェクトには、エラーの種類やメッセージ、発生した場所などの情報が含まれており、デバッグやエラー処理に利用できます。
自分でエラーを発生させたい場合は、throwとnew Error()を組み合わせてエラーオブジェクトを作成します。
標準のエラーオブジェクト
JavaScriptには、用途ごとに複数のエラーオブジェクトが用意されています。
| エラー | 説明 |
|---|---|
Error |
一般的なエラー。 |
ReferenceError |
存在しない変数などを参照した場合に発生する。 |
TypeError |
値の型が適切でない場合に発生する。 |
SyntaxError |
JavaScriptの文法に誤りがある場合に発生する。 |
RangeError |
値が許可された範囲外の場合に発生する。 |
URIError |
URIのエンコード・デコードでエラーが発生した場合に使用される。 |
Errorオブジェクトを作成する
new Error()を使うと、自分でエラーオブジェクトを作成できます。
const error = new Error("エラーが発生しました");
console.log(error.message);
実行結果は次のようになります。
エラーが発生しました
throwでエラーを発生させる
throwを使うと、作成したエラーオブジェクトを発生させることができます。
function checkValue(value) {
if (value < 0) {
throw new Error("値は0以上で入力してください。");
}
return value;
}
try {
console.log(checkValue(-5));
} catch (error) {
console.log(error.message);
}
この例では、負の数が渡されるとErrorオブジェクトを作成してthrowし、catchで受け取っています。
エラーオブジェクトの主なプロパティ
エラーオブジェクトには、次のような情報が含まれています。
| プロパティ | 説明 |
|---|---|
name |
エラーの種類(Error、TypeErrorなど)。 |
message |
エラーメッセージ。 |
stack |
エラーが発生した呼び出し履歴(実行環境による)。 |
例えば、次のように取得できます。
try {
throw new Error("サンプルエラー");
} catch (error) {
console.log(error.name);
console.log(error.message);
console.log(error.stack);
}
独自のエラークラスを作成する
アプリケーション独自のエラーを作成したい場合は、Errorクラスを継承します。
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
function checkAge(age) {
if (age < 18) {
throw new ValidationError("18歳以上のみ利用できます。");
}
return "利用できます。";
}
try {
console.log(checkAge(15));
} catch (error) {
console.log(error.name);
console.log(error.message);
}
独自のエラークラスを作成すると、エラーの種類ごとに処理を分けやすくなります。
Errorと文字列をthrowする違い
throwでは文字列を投げることもできますが、通常はErrorオブジェクトを使用することが推奨されています。
| 方法 | 特徴 |
|---|---|
throw "エラー" |
単純な文字列だけで、エラー情報が少ない。 |
throw new Error("エラー") |
エラー名やスタックトレースなどの情報を保持できる。 |
まとめ
- エラーオブジェクトは、エラーの詳細情報を保持するオブジェクトである。
new Error()でエラーオブジェクトを作成できる。throwを使ってエラーを発生させる。name、message、stackなどの情報を取得できる。- 独自のエラークラスを作成すると、用途ごとのエラー管理がしやすくなる。
throwでは文字列ではなくErrorオブジェクトを利用することが推奨される。