Error オブジェクトは、JavaScript における標準的なエラー処理メカニズムの中心的な役割を果たすオブジェクトです。プログラム実行中に発生するエラーや例外を表現し、デバッグに重要な情報を提供します。

基本的な構造

編集

Error オブジェクトは、主に以下のプロパティを持ちます:

  • name: エラーの種類を示す文字列(例:「TypeError」「ReferenceError」)
  • message: エラーの詳細な説明を提供する文字列
  • stack: エラーが発生した呼び出し履歴を含むプロパティ(非標準だが広くサポートされています)

エラーの種類

編集

JavaScriptには、いくつかの組み込みエラー型が存在します:

EvalError
スクリプトのeval()関数に関連するエラーとして定義されていますが、現在のECMAScript仕様では使用されていません。過去のバージョンとの互換性のために存在します。
RangeError
許容範囲外の値が検出された場合にスローされます。例として、数値が期待される範囲を超えた場合が挙げられます。
ReferenceError
無効な参照が検出された場合にスローされます。たとえば、存在しない変数や関数を参照しようとした場合です。
SyntaxError
構文解析エラーが発生した場合にスローされます。例として、無効な構文のJavaScriptコードがあります。
TypeError
特定の操作が失敗し、その原因が他のエラータイプでは適切に表現できない場合にスローされます。たとえば、不正な型の操作が原因です。
URIError
グローバルURI操作関数(encodeURIdecodeURIなど)がその定義に反する方法で使用された場合にスローされます。

使用例

編集

エラーの生成

編集
// 手動でのエラー生成
const customError = new Error('カスタムエラーメッセージ');

// 特定のエラー型の生成
const typeError = new TypeError('型が正しくありません');

エラーのキャッチ

編集
try {
    // エラーが発生する可能性のあるコード
    throw new Error('エラーが発生しました');
} catch (error) {
    console.error(error.name);     // エラー名
    console.error(error.message);  // エラーメッセージ
    console.error(error.stack);    // スタックトレース
}

カスタムエラー

編集

独自のエラークラスを作成することも可能です:

class CustomError extends Error {
    constructor(message) {
        super(message);
        this.name = 'CustomError';
    }
}

try {
    throw new CustomError('カスタムエラーの例');
} catch (error) {
    console.log(error instanceof CustomError); // true
}

注意点

編集
  • エラーオブジェクトは、プログラムの異常な状態を示すために使用されます
  • エラーハンドリングは、アプリケーションの安定性と信頼性を高めるために重要です
  • 可能な限り具体的なエラー情報を提供し、適切に処理することが推奨されます

静的プロパティ

編集

Errorオブジェクトには、以下のような静的プロパティがあります。

Error.captureStackTrace()

編集

Error.captureStackTrace(targetObject[, constructorOpt])は、スタックトレース情報をエラーオブジェクトに手動で追加するための静的メソッドです。 V8独自のメソッドです。

class CustomError extends Error {
  constructor(message) {
    super(message);
    Error.captureStackTrace(this, CustomError);
  }
}

const error = new CustomError("Custom error occurred");
console.log(error.stack);
引数
  • targetObject: スタックトレースをキャプチャするオブジェクト。
  • constructorOpt: スタックトレースの開始点を指定する関数。

Error.length

編集

Error.lengthは、Errorコンストラクタが受け取る引数の数を表します。 通常、この値は1です。

console.log(Error.length); // => 1

Error.name

編集

Error.nameは、エラーの名前を表します。デフォルトでは"Error"ですが、カスタムエラークラスで変更可能です。

class CustomError extends Error {
  constructor(message) {
    super(message);
    this.name = "CustomError";
  }
}

const error = new CustomError("Something went wrong");
console.log(error.name); // => "CustomError"

Error.prototype

編集

Error.prototypeは、Errorオブジェクトのプロトタイプを表します。 このプロトタイプには、toString()stackプロパティなどが含まれています。

const error = new Error("Example error");
console.log(Object.getPrototypeOf(error) === Error.prototype); // => true

Error.stackTraceLimit

編集

Error.stackTraceLimitは、スタックトレースに含まれるフレーム数の上限を設定するプロパティです。 デフォルト値は10ですが、必要に応じて変更できます。

Error.stackTraceLimit = 20;

const error = new Error("Deep stack trace example");
console.log(error.stack); // 最大20フレームのスタックトレースが表示されます

注意点

編集
  1. Error.captureStackTraceはV8独自のメソッド。ChromeとEdge以外のブラウザ環境では利用できない場合があります。
  2. プロパティの値を変更する際は、グローバルなエラー挙動に影響を与える可能性があるため注意が必要です。

インスタンスプロパティ

編集

Errorオブジェクトには、以下のようなインスタンスプロパティがあります。

Error.prototype.constructor()

編集

Error.prototype.constructorは、エラーオブジェクトのコンストラクタを指します。 デフォルトでは、Errorコンストラクタを参照しますが、カスタムエラーの場合には変更されることがあります。

const error = new Error("Sample error");
console.log(error.constructor === Error); // => true

Error.prototype.message

編集

Error.prototype.messageは、エラーに関連付けられたメッセージを格納する文字列プロパティです。 コンストラクタに渡されたメッセージがこのプロパティに設定されます。

const error = new Error("An error occurred");
console.log(error.message); // => "An error occurred"
  • デフォルト値は空文字列("")です。

Error.prototype.name

編集

Error.prototype.nameは、エラーの名前を表します。 デフォルトでは"Error"ですが、カスタムエラーで上書きできます。

class CustomError extends Error {
  constructor(message) {
    super(message);
    this.name = "CustomError";
  }
}

const error = new CustomError("Custom error message");
console.log(error.name); // => "CustomError"

Error.prototype.toString()

編集

Error.prototype.toString()は、エラーオブジェクトを文字列に変換するメソッドです。 通常、エラーのnamemessageを組み合わせた形式で出力されます。

const error = new Error("An error occurred");
console.log(error.toString()); // => "Error: An error occurred"
  • toString()をカスタマイズすることで、エラーオブジェクトの出力を変更することも可能です。
class CustomError extends Error {
  constructor(message) {
    super(message);
    this.name = "CustomError";
  }

  toString() {
    return <code>${this.name}: [${this.message}]</code>;
  }
}

const error = new CustomError("Something went wrong");
console.log(error.toString()); // => "CustomError: [Something went wrong]"

外部リンク

編集