この記事は編集レビューを必要としています。ぜひご協力ください

概要

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

構文

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

引数

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

説明

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

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

Error types

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

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

プロパティ

prototype
Error インスタンスにプロパティを追加することが出来ます。

メソッド

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

Error インスタンス

全ての Error インスタンス及び 非一般的エラー のインスタンスは Error.prototype を継承します。 全てのコンストラクタ関数と同様に、このコンストラクタと共に生成された全てのインスタンスにプロパティ又はメソッドを追加するために、このコンストラクタのプロトタイプを利用できます。

プロパティ

標準プロパティ

constructor
インスタンスのプロトタイプが生成された関数を示します。
message
エラーメッセージ。
name
エラー名

ベンダー独自の拡張

非標準
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Microsoft
description
エラー説明。 message と同類。
number
エラー数。
Mozilla
fileName
このエラーを起こしたファイルへのパス。
lineNumber
このエラーを起こしたファイル内の行番号。
stack
スタックトレース。

メソッド

toSource
指定された Error オブジェクトのソースを含む文字列を返します。 この値を、新しいオブジェクトを生成するのに利用できます。 Object.toSource メソッドをオーバーライドします。
toString
指定されたオブジェクトを表す文字列を返します。Object.toString メソッドをオーバーライドします。

Properties

標準プロパティ

constructor
インスタンスのプロトタイプが生成された関数を示します。
message
エラーメッセージ。
name
エラー名

ベンダー独自の拡張

非標準
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

Microsoft
description
エラー説明。 message と同類。
number
エラー数。
Mozilla
fileName
このエラーを起こしたファイルへのパス。
lineNumber
このエラーを起こしたファイル内の行番号。
stack
スタックトレース。

Methods

toSource
指定された Error オブジェクトのソースを含む文字列を返します。 この値を、新しいオブジェクトを生成するのに利用できます。 Object.toSource メソッドをオーバーライドします。
toString
指定されたオブジェクトを表す文字列を返します。Object.toString メソッドをオーバーライドします。
 

一般的なエラーの投げ方

通常、意図的に起こすエラーオブジェクトは throw キーワードを使って生成します。 try...catch コンストラクトを使ってエラーを処理することが出来ます。

try {
    throw new Error("Whoops!");
} catch (e) {
    alert(e.name + ": " + e.message);
}

例: 特定のエラーを処理する

this should probably be removed特定のエラー型だけを処理するために選択するには、エラー型とエラーのコンストラクタプロパティを調べるか、もし最近のJavaScriptエンジンに向けて書いているならinstanceofキーワードを使います。 

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

Error Typesをカスタマイズする

あなたはもしかしたらErrorオブジェクトから派生したnew MyError()でエラーを投げることができて、使用することができる例外ハンドラにエラーの種類をチェックさせるためにinstansof MyErrorが使用可能な自分自身のエラータイプを定義したいかもしれません。これを行う通常の方法を下に示します。

最新のFirefoxでは、投げられたMyError例外が間違ったlineNumberやfileNameを報告するかもしれないことに注意してください。

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

// Create a new object, that prototypally inherits from the Error constructor
function MyError(message) {
  this.name = 'MyError';
  this.message = message || 'Default Message';
  this.stack = (new Error()).stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.constructor = MyError;

try {
  throw new MyError();
} catch (e) {
  console.log(e.name);     // 'MyError'
  console.log(e.message);  // 'Default Message'
}

try {
  throw new MyError('custom message');
} catch (e) {
  console.log(e.name);     // 'MyError'
  console.log(e.message);  // 'custom message'
}

仕様

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) 標準 Initial definition. Implemented in JavaScript 1.1.
ECMAScript 5.1 (ECMA-262)
Error の定義
標準  
ECMAScript 2015 (6th Edition, ECMA-262)
Error の定義
標準  
ECMAScript 2017 Draft (ECMA-262)
Error の定義
ドラフト  

ブラウザ互換性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (有) (有) (有) (有) (有)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (有) (有) (有) (有) (有) (有)

関連項目

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

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