JavaScript の try - catch - finally ステートメント


try、catch、および finally ブロックは、例外 (エラーの一種) を処理するために使用されます.それらについて学ぶ前に、プログラミングにおけるエラーの種類について知る必要があります.

JavaScript の try...catch ステートメント:
例外を処理するには、try...catch ステートメントを使用します.その構文は次のとおりです.

try {
    // body of try
} 
catch(error) {
    // body of catch  
}


メインコードは try ブロック内にあります. try ブロックの実行中にエラーが発生すると、catch ブロックに移動します. catch ブロックは、catch ステートメントに従ってエラーを処理します.

エラーが発生しない場合、try ブロック内のコードが実行され、catch ブロックはスキップされます.

JavaScript try...catch...finally ステートメント:
また、try...catch...finally ステートメントを使用して例外を処理することもできます. finally ブロックは、コードが正常に実行された場合とエラーが発生した場合の両方で実行されます.

try...catch...finally ブロックの構文は次のとおりです.

try {
    // try_statements
} 
catch(error) {
    // catch_statements  
}
finally() {
    // codes that gets executed anyway
}


注: try ステートメントの後には、catch または finally ステートメントを使用する必要があります.そうしないと、プログラムはエラーをスローします.

JavaScript try...setTimeout でキャッチ:
setTimeout() のように「時限」コードで例外が発生した場合、try...catch は例外をキャッチしません.例えば:

try {
    setTimeout(function() {
        // error in the code
    }, 3000);
} catch (e) {
  console.log( "won't work" );
}


上記の try...catch は機能しません.これは、エンジンが既に try..catch 構造を離れており、関数が後で実行されるためです.

時限関数内で例外をキャッチするには、try..catch ブロックがその関数内にある必要があります.例えば、

setTimeout(function() {
    try {
        // error in the code
    } catch {
        console.log( "error is caught" );
    }
}, 3000);


また、throw ステートメントを try...catch ステートメントと共に使用して、ユーザー定義の例外を使用することもできます.たとえば、特定の数値は 0 で除算されます.無限大をプログラム内のエラーと見なしたい場合は、throw ステートメントを使用してユーザー定義の例外をスローし、その条件を処理できます.