すぐに動かせるJavaScript入門

例外/throw文

例外とは例外的な条件やエラーが発生したことを示すシグナルのことです。JavaScriptでは実行時にエラーが発生した場合と、throw文を使った場合に例外がスローされます。スローされた例外はtry/catch/finally文を使って例外処理を行います。throw文の書式は次の通りです。

throw文の書式

throw expression;

expression式に指定する値には型の制限はありませんが、通常はErrorオブジェクトかErrorクラスのサブクラスのインスタンスを返すようにします。

例外を投げる関数の例

function factorial(x){ if (x < 0) throw new Error("xは負であってはいけません"); for(var sum=1;x>1;sum *= x,x--) ; return sum; }

これは階乗を計算するコードです。負の数の階乗の計算はエラーとして、Errorオブジェクトをスローしています。例外がスローされると、JavaScriptインタプリタはプログラムの実行を中断し最も近い例外ハンドラに処理を移動します。例外ハンドラはtry/catch/finally文を使って記述します。もし例外ハンドラが見つからない場合は、その関数を呼び出したコードを例外ハンドラが見つかるまでさかのぼります。例外ハンドラが見つからなかった場合はエラーとなります。

例外/try/catch/finally文

実行時エラーやthrowでスローされた例外は、try/catch/finally文で処理します。例外が発生する可能性のあるコードはtry句に記述し、例外が発生したときに呼び出されるコードをcatch句に記述、最後にtry句が実行されれば必ず呼び出されるコードをfinally句に記述します。finally句にはリソースの解放など、後始末をするコードを書くと良いです。catch句とfinally句は省略可能ですが、どちらか一方は必ず記述する必要があります。try/catch/finally文の構文は次のようになります。

try/catch/finally文の構文

try{
    statement
    }[catch(identifier){
    statement
    }]
    [finally{
    statement
    }]

catch句にあるidentifierには、try句で例外が発生した時に、その例外オブジェクトの値が変数として入ります。簡単な例外処理のサンプルをあげてみます。

出力:
エラー:

since 2013