Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. JavaScript
  3. JavaScript リファレンス
  4. 標準組み込みオブジェクト
  5. Error

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

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 オブジェクトは、ユーザー定義の例外の基底オブジェクトとして使用することもできます。標準の組み込みエラー型については下記を参照してください。

解説

実行時エラーが発生すると、新しいError オブジェクトが生成されスローされます。

Errorシリアライズ可能オブジェクトなので、structuredClone() で複製したり、ワーカー間でpostMessage() を使用してコピーしたりすることができます。

エラーの型

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

EvalError

グローバル関数eval() に関して発生するエラーを表すインスタンスを生成します。

RangeError

数値変数または引数が、その有効範囲外である場合に発生するエラーを表すインスタンスを生成します。

ReferenceError

不正な参照から参照先の値を取得した時に発生するエラーを表すインスタンスを生成します。

SyntaxError

構文エラーを表すインスタンスを生成します。

TypeError

変数または引数の型が有効でない場合に発生するエラーを表すインスタンスを生成します。

URIError

encodeURI() または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" です。TypeErrorSyntaxError のようなサブクラスは各自の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 構文を使用してエラーを処理してください。

js
try {  throw new Error("Whoops!");} catch (e) {  console.error(`${e.name}: ${e.message}`);}

特定のエラーを処理する

instanceof でエラー型をテストすることにより、特定のエラー型だけを選んで処理できます。

js
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())。

js
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 プロパティを定義します。

js
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 コンストラクターを含めます。

js
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

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp