エラーオブジェクトの作成 | throwによるエラー発生 | JavaScript 超完全入門 基本から発展までのすべて

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

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

JavaScriptでは、エラーが発生したときにエラーオブジェクト(Error Object)が作成されます。エラーオブジェクトには、エラーの種類やメッセージ、発生した場所などの情報が含まれており、デバッグやエラー処理に利用できます。

自分でエラーを発生させたい場合は、thrownew 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を使ってエラーを発生させる。
  • namemessagestackなどの情報を取得できる。
  • 独自のエラークラスを作成すると、用途ごとのエラー管理がしやすくなる。
  • throwでは文字列ではなくErrorオブジェクトを利用することが推奨される。