JavaScript - 例外処理文

例外処理文

JavaScript では throw 文を使用して例外を発生させることができます。また try...catch 文を使用して例外を処理することができます。

throw 文

throw 文は、例外をスローするために使用します。例外をスローするには、スローしたい値を含む式を指定してください :

// throw expression;

throw "Error";            // String type
throw 42;                 // Number type
throw true;               // Boolean type
throw new Error("Error"); // Object type

また、例外をスローする際にオブジェクトを指定することができます。そして catch ブロックでそのオブジェクトのプロパティを参照できます。

// UserException というオブジェクト型を作成
function UserException(message) {
    this.message = message;
    this.name = 'UserException';
}

// 文字列として使用されるときに例外を整形する
UserException.prototype.toString = function() {
    return this.name + ': "' + this.message + '"';
}

// UserException のインスタンスを作成し、それをスローする
throw new UserException('Value too high');

try...catch 文

try...catch 文はテストしたい文のブロックを指定し、さらにスローされる例外に対する 1 つ以上の対処方法を指定します。例外がスローされると try...catch 文がそれを受け取ります。

try...catch 文は 1 つの try ブロックと 0 個以上の catch ブロックで構成されます。try ブロックは 1 つ以上の文を含み catch ブロックは try ブロックで例外がスローされた場合の処理を指定する文が含まれます。

try ブロック内、もしくは try ブロック内から呼び出された関数内のいずれかの文が例外をスローすると、制御はすぐに catch ブロックに移ります。try ブロックで例外がスローされなかった場合 catch ブロックはスキップされます。

try {
    var result = 100 * num;
    console.log( result );
} catch(e) {
    console.log( e.message ); // num is not defined
}

finally ブロックは try および catch ブロックの実行が終わった後に try...catch 文の後に続く文よりも先に実行される文で構成されます。finally は例外がスローされてもされなくても実行されます。例外がスローされた場合 finally ブロック内の文はたとえ例外処理をする catch ブロックがなくても実行されます。

openMyFile();

try {
    writeMyFile(theData); // ここでエラーがスローされる可能性がある
} catch(e) {  
    handleError(e); // エラーを受け取り、それを処理する
} finally {
    closeMyFile(); // 常にリソースが閉じられる
}

finally ブロックが値を返す場合、その値は try および catch ブロックの return 文にかかわらず try-catch-finally 全体が生成する戻り値になります。

function f() {
    try {
        console.log(0);
        throw 'bogus';
      
    } catch(e) {
        console.log(1);
        return true;    // この戻り値は、finally ブロックが完了するまで保留となる
        console.log(2); // この先は実行されない
      
    } finally {
        console.log(3);
        return false;   // 直前の "return" が上書きされる
        console.log(4); // この先は実行されない
      
    }
    // ここで "return false" が実行される
    console.log(5);   // この先は実行されない    
}

f(); // 0, 1, 3 がログに表示され、false が返される

関連記事

JavaScript のまとめページはプログラミング JavaScript 入門を参照してください。

Category:
プログラミング
公開日:
更新日:
Pageviews:
17
Shares:
1
Tag:
JavaScript
hatebu icon
hatebu