LOGv:20171214

JSのエラーオブジェクトとtry-catch-finally文

JSのエラーオブジェクトって今更ながら複数あるんだなと。
Error – JavaScript | MDN

例外処理try…catch文にある
finallyブロックを知らなかった。
finallyブロックは例外が発生しようがしまいが、catchブロックがなかろうが実行さると。
これを使えば例外発生時に適切にスクリプトを停止させることが出来るというもの。

気になった点は

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

例えば

let test = ()=>{
    try {
        throw 1;
    } catch(e) {
        console.log('catch');
        return ('catch block return');
    } finally {
        console.log('finally');
        return ('finally block return');
    }
}

console.log(test());

とある場合、

  • catchブロック : -> catch
  • finallyブロック : -> finally
  • finallyブロック : -> finally block return

の順番で返される。
finallyブロックが何も返さなければ

let test = ()=>{
    try {
        throw 1;
    } catch(e) {
        console.log('catch');
        return ('catch block return');
    } finally {
        console.log('finally');
    }
}

console.log(test());
  • catchブロック : -> catch
  • finallyブロック : -> finally
  • catchブロック : -> catch block retrun

の順番で返される。
つまり引用の通りfinallyブロックの中return文がtry-catch-finally文全体が生成する戻り値になってcatchブロック内のreturn文は保留されている状態になると。

知らなかったなー

open close