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
- エラーの名称。
ベンダー独自の拡張
非標準
この機能は標準ではなく、標準化の予定もありません。公開されているウェブサイトには使用しないでください。ユーザーによっては使用できないことがあります。実装ごとに大きな差があることもあり、将来は振る舞いが変わるかもしれません。
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 Latest Draft (ECMA-262) Error の定義 |
ドラフト |
ブラウザーの実装状況
We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | (有) | (有) | (有) | (有) | (有) |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | (有) | (有) | (有) | (有) | (有) | (有) |