「JavaScript/例外処理」の版間の差分

削除された内容 追加された内容
M fix lint error (use script)
Ef3 (トーク | 投稿記録)
Errorオブジェクトをthrowする形にした。言語仕様ではないがユーザと処理系とで投げる例外オブジェクトの型が一致しないとcatchが混乱するので。
31 行
 
== try-catch ==
try文のブロックの中で例外が発生すると、catchのブロックが実行され、例外が捕捉されます。try文のブロックで例外が発生しなかった場合は、catchのブロックは実行されません。catchのブロックが実行された後も、catchのブロックの中で例外が発生しなければ、プログラムは中断せずに以降の処理を継続します。
 
<syntaxhighlight lang="javascript">
try {
throw new Error( "エラー!" );
}
catch (e) {
alert(e.message); // "エラー!" と警告
}
 
44 行
</syntaxhighlight>
 
catchは複数置くことができます。また、catchは必ずthrow文のパッセ''e''を受け取らなければなりません。''e''の変数名はご自由に任意の識別子
 
== finally ==
finallyは事後処理を行います。try-catchの後にfinallyを書くと、例外が発生してもしなくてもfinallyが実行されます。
 
<syntaxhighlight lang="javascript">
63 行
</syntaxhighlight>
 
例外が発生した場合は、catchが実行された後にfinallyが実行されます。finallyが実行された後は以降の処理を継続します。
 
<syntaxhighlight lang="javascript">
try {
alert("try"); // 0. "try" と警告
throw nullnew Error();
}
catch (e) {
80 行
</syntaxhighlight>
 
try文の後にはcatchまたはfinallyのいずれか、もしくは両方を置かなければなりません。catchを除いたtry-finallyでは、例外が発生してもしなくてもfinallyは実行されますが、catchによって例外が捕捉されないので、例外が発生した場合は以降の処理を中断します。
 
==大域脱出==
86 行
 
ですが、大域脱出を使うことは極力避けてください。breakやreturnを[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/label ラベル]と共に使用することで、ほとんどの場合は帯域脱出を使うことなく要件を達成できます。
例えば、Array.prototype.forEachメソッドの様にcallbackで反復処理を行う場合は、例外による帯域脱出が適用なケースです。
 
[[Category:JavaScript|れいかいしより]]