このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Error
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
Error オブジェクトは、実行時エラーが発生した時に発生します。Error オブジェクトは、ユーザー定義の例外の基底オブジェクトとして使用することもできます。標準の組み込みエラー型については下記を参照してください。
In this article
解説
実行時エラーが発生すると、新しいError オブジェクトが生成されスローされます。
Error はシリアライズ可能オブジェクトなので、structuredClone() で複製したり、ワーカー間でpostMessage() を使用してコピーしたりすることができます。
エラーの型
JavaScript には、一般的なError コンストラクターの他に、中核となる他のエラーコンストラクターがあります。クライアント側の例外については、例外処理文を参照してください。
EvalErrorグローバル関数
eval()に関して発生するエラーを表すインスタンスを生成します。RangeError数値変数または引数が、その有効範囲外である場合に発生するエラーを表すインスタンスを生成します。
ReferenceError不正な参照から参照先の値を取得した時に発生するエラーを表すインスタンスを生成します。
SyntaxError構文エラーを表すインスタンスを生成します。
TypeError変数または引数の型が有効でない場合に発生するエラーを表すインスタンスを生成します。
URIErrorencodeURI()またはdecodeURI()に不正な引数が渡された時に発生するエラーを表すインスタンスを生成します。AggregateError処理から複数のエラーを報告する必要がある場合(例えば
Promise.any())に複数のエラーを単一のオブジェクトとして表現するインスタンスを生成します。InternalError非標準"too much recursion" (深すぎる再帰) など、JavaScript エンジンで内部エラーが発生した時に発生するエラーを表すインスタンスを生成します。
コンストラクター
Error()新しい
Errorオブジェクトを生成します。
静的プロパティ
Error.stackTraceLimit非標準標準外の数値プロパティで、エラースタックトレースに含めるスタックフレームの数を制限します。
静的メソッド
Error.captureStackTrace()標準外の関数で、指定されたオブジェクトに
stackプロパティを生成します。Error.isError()引数がエラーならば
trueを返し、それ以外ならばfalseを返します。Error.prepareStackTrace()非標準省略可標準外の関数で、発生した例外に対して JavaScript エンジンによって呼び出され、ユーザーがスタックトレースを独自に書式化することができるようにします。詳しくはV8 Stack Trace API のドキュメントを参照してください。
インスタンスプロパティ
これらのプロパティはError.prototype で定義されており、すべてのError インスタンスで共有されます。
Error.prototype.constructorこのインスタンスオブジェクトを作成したコンストラクター関数です。
Errorインスタンスの場合、初期値はErrorコンストラクターです。Error.prototype.nameエラーの名称を表します。
Error.prototype.nameの場合、初期値は"Error"です。TypeErrorやSyntaxErrorのようなサブクラスは各自のnameプロパティを提供します。Error.prototype.stack非標準スタックトレースのための標準外のプロパティです。
これらのプロパティはそれぞれのError インスタンス自身のプロパティです。
cause現在のエラーがなぜ発生したのかを示すエラーの原因。通常は捕捉した別のエラー。ユーザーが生成した
Errorオブジェクトでは、コンストラクターの第二引数でcauseプロパティとして渡された値です」。columnNumber非標準標準外の Mozilla のプロパティで、このエラーが発生した行内の桁番号です。
fileName非標準標準外の Mozilla のプロパティで、このエラーが発生したファイルへのパスです。
lineNumber非標準標準外の Mozilla のプロパティで、このエラーが発生したファイル内の行番号です。
messageエラーメッセージ。ユーザーが作成した
Errorオブジェクトの場合、これはコンストラクターの最初の引数として渡される文字列です。
インスタンスメソッド
Error.prototype.toString()指定したオブジェクトを表す文字列を返します。
Object.prototype.toString()メソッドを上書きします。
例
>一般的なエラーを発生させる
通常、Error オブジェクトはthrow キーワードを使って意図的にエラーを発生させるために作成します。try...catch 構文を使用してエラーを処理してください。
try { throw new Error("Whoops!");} catch (e) { console.error(`${e.name}: ${e.message}`);}特定のエラーを処理する
instanceof でエラー型をテストすることにより、特定のエラー型だけを選んで処理できます。
try { foo.bar();} catch (e) { if (e instanceof EvalError) { console.error(`${e.name}: ${e.message}`); } else if (e instanceof RangeError) { console.error(`${e.name}: ${e.message}`); } // など else { // どれにも一致しない場合、Error を未処理のままとする throw e; }}類似するエラーと区別する
異なる対処が必要な原因で失敗するにもかかわらず、コードブロックが非常によく似たエラー(すなわち同じ型やメッセージ)を投げることがあります。
発生した元のエラーが管理下にない場合、エラーを捕捉してより詳細なメッセージを持つ新しいError オブジェクトを投げることが一つの選択肢となります。元のエラーは新しいError のコンストラクターのoptions パラメーターのcause プロパティに渡すべきです。これによって、上位の try/catch ブロックが元のエラーとスタックトレースを利用できることを保証します。
以下の例は、似たエラーで失敗する 2 つのメソッドを示しています(doFailSomeWay() とdoFailAnotherWay())。
function doWork() { try { doFailSomeWay(); } catch (err) { throw new Error("Failed in some way", { cause: err }); } try { doFailAnotherWay(); } catch (err) { throw new Error("Failed in another way", { cause: err }); }}try { doWork();} catch (err) { switch (err.message) { case "Failed in some way": handleFailSomeWay(err.cause); break; case "Failed in another way": handleFailAnotherWay(err.cause); break; }}メモ:もしあなたがライブラリーを制作しているなら、利用者にエラーメッセージを解析するようお願いするよりも、発生したエラーを区別するために Error の cause を使用すべきです。例についてはエラーの cause ページを参照してください。
サブクラスのコンストラクターがsuper() を呼び出すときにoptions パラメーターを渡せば、独自のエラー型もcause プロパティを利用できます。基底クラスのコンストラクターError() はoptions.cause を読み取って、新しいエラーのインスタンスにcause プロパティを定義します。
class MyError extends Error { constructor(message, options) { // "cause" プロパティを設定するために第二引数に `options` を渡す必要がある。 super(message, options); }}console.log(new MyError("test", { cause: new Error("cause") }).cause);// Error: cause独自のエラー型
Error から派生した独自のエラー型を定義してthrow new MyError() ができるようにし、instanceof MyError で例外ハンドラー内のエラーの種類を確認したいでしょう。これを行う一般的な方法の実例を以下に示します。
Stack Overflow の突っ込んだ議論、"What's a good way to extend Error in JavaScript?" も参照してください。
警告:組み込みのサブクラス化は、ES6 より古いコードに確実にトランスパイルできるわけではありません。なぜなら、Reflect.construct() を使わずに特定のnew.target を持つ基底クラスを構築する手段がないためです。追加の設定を行うか、コンストラクターの最後でObject.setPrototypeOf(this, CustomError.prototype) を手動で呼ぶ必要があります。そうしないと、構築されたインスタンスはCustomError のインスタンスになりません。詳しくはthe TypeScript FAQ をご覧ください。
メモ:ES2015 クラスを使用した場合、一部のブラウザーはスタックトレース上にCustomError コンストラクターを含めます。
class CustomError extends Error { constructor(foo = "bar", ...params) { // 親のコンストラクターに(ベンダー固有のものも含めて)残りの引数を渡す super(...params); // エラーが発生した箇所の正しいスタックトレースを維持する (V8でのみ有効) if (Error.captureStackTrace) { Error.captureStackTrace(this, CustomError); } this.name = "CustomError"; // カスタムのデバッグ情報 this.foo = foo; this.date = new Date(); }}try { throw new CustomError("baz", "bazMessage");} catch (e) { console.error(e.name); // CustomError console.error(e.foo); // baz console.error(e.message); // bazMessage console.error(e.stack); // stack trace}仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-error-objects> |