Error コンストラクターは、エラーオブジェクトを生成します。Error オブジェクトのインスタンスは、ランタイムエラーが発生した時に投げられます。Error オブジェクトは、ユーザー定義の例外の基底オブジェクトとして使用することもできます。標準の組み込みエラー型については下記を参照してください。

構文

new Error([message[, fileName[, lineNumber]]])

引数

message
任意。人間が読めるエラーの説明。
fileName
任意。生成された Error オブジェクト上の fileName プロパティに設定される値。デフォルトでは、Error() コンストラクターを呼び出したコードを含むファイルの名前。
lineNumber
任意。生成された Error オブジェクト上の lineNumber プロパティに設定される値。デフォルトでは、Error() コンストラクターの呼び出しを含む行番号。

説明

ランタイムエラーが発生すると、新しい Error オブジェクトが生成され、投げられます。

このページは、Error オブジェクト自体の使い方と、それをコンストラクター関数として使うことについて書かれています。Error インスタンスに継承されるプロパティとメソッドのリストについては、Error.prototype を参照してください。

エラーの型

JavaScript には、一般的な Error コンストラクタの他に、中核となる 6 つのエラーコンストラクターがあります。クライアント側の例外については、Exception Handling Statements を参照してください。

EvalError
グローバル関数 eval() に関して発生するエラーを表すインスタンスを生成します。
InternalError
"too much recursion" (過剰な再帰) など、JavaScript エンジンで内部エラーが投げられた時に発生するエラーを表すインスタンスを生成します。
RangeError
数値変数または引数が、その有効範囲外である場合に発生するエラーを表すインスタンスを生成します。
ReferenceError
不正な参照から参照先の値を取得した時に発生するエラーを表すインスタンスを生成します。
SyntaxError
eval() 内のコードの解釈中に発生する構文エラーを表すインスタンスを生成します。
TypeError
変数または引数の型が有効でない場合に発生するエラーを表すインスタンスを生成します。
URIError
encodeURI() または decodeURI() に不正な引数が渡された時に発生するエラーを表すインスタンスを生成します。

プロパティ

Error.prototype
Error インスタンスにプロパティを追加できます。

メソッド

グローバルの Error オブジェクトは、自身のメソッドを持ちませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。

Error インスタンス

すべての Error インスタンスと non-generic errors のインスタンスは Error.prototype から継承します。すべてのコンストラクター関数と同様に、このコンストラクターの prototype を使用して、プロパティやメソッドをこのコンストラクターで生成されたすべてのインスタンスに追加できます。

プロパティ

標準プロパティ

Error.prototype.constructor
インスタンスのプロトタイプを生成した関数を指定します。
Error.prototype.message
エラーメッセージ。
Error.prototype.name
エラーの名称。

ベンダー独自の拡張

非標準
この機能は標準ではなく、標準化の予定もありません。公開されている Web サイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。

Microsoft

Error.prototype.description
エラーの説明。message と類似。
Error.prototype.number
エラー番号。

Mozilla

Error.prototype.fileName
このエラーを起こしたファイルへのパス。
Error.prototype.lineNumber
このエラーを起こしたファイル内の行番号。
Error.prototype.columnNumber
このエラーを起こした行内の列番号。
Error.prototype.stack
スタックトレース。

メソッド

Error.prototype.toSource()
指定した Error オブジェクトのソースを含む文字列を返します。この値を新しいオブジェクトの生成に利用できます。Object.prototype.toSource() メソッドを上書きします。
Error.prototype.toString()
指定したオブジェクトを表す文字列を返します。Object.prototype.toString() メソッドを上書きします。

一般的なエラーを投げる

通常、throw キーワードを使い意図的にエラーを発生させて Error オブジェクトを生成します。try...catch 構文を使用してエラーを処理してください:

try {
  throw new Error('Whoops!');
} catch (e) {
  console.log(e.name + ': ' + e.message);
}

特定のエラーを処理する

エラーの constructor プロパティでエラー型をテストすることにより、特定のエラー型だけを選んで処理できます。または、最近の JavaScript エンジン向けに書いているのであれば、instanceof キーワードが使えます:

try {
  foo.bar();
} catch (e) {
  if (e instanceof EvalError) {
    console.log(e.name + ': ' + e.message);
  } else if (e instanceof RangeError) {
    console.log(e.name + ': ' + e.message);
  }
  // ... etc
}

独自のエラー型

Error から派生した独自のエラー型を定義して throw new CustomError() ができるようにし、instanceof CustomError で例外ハンドラー内のエラーの種類を確認したいでしょう。これを行う一般的な方法の実例を以下に示します。

"What's a good way to extend Error in JavaScript?" discussion on Stackoverflowも参照してください。

function CustomError(message) {
     this.message = message;
     var last_part = new Error().stack.match(/[^\s]+$/);
     this.stack = `${this.name} at ${last_part}`;
 }
 Object.setPrototypeOf(CustomError, Error);
 CustomError.prototype = Object.create(Error.prototype);
 CustomError.prototype.name = "CustomError";
 CustomError.prototype.message = "";
 CustomError.prototype.constructor = CustomError;


try {
    throw new CustomError("This is Error");
} catch (e) {
    if (e instanceof CustomError) {
        console.log(e.message);
    }
}

仕様

仕様書 策定状況 備考
ECMAScript 1st Edition (ECMA-262) 標準 初期定義。JavaScript 1.1 で実装。
ECMAScript 5.1 (ECMA-262)
Error の定義
標準
ECMAScript 2015 (6th Edition, ECMA-262)
Error の定義
標準
ECMAScript 2017 Draft (ECMA-262)
Error の定義
ドラフト

ブラウザーの実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: Marsf, lv7777, plonk, teoli, ethertank, Potappo, Hfjapancom
 最終更新者: Marsf,