JavaScript学習ノート5日目_エラー処理と

1239 ワード

廖雪峰先生のjavascript教程の学習ノート
1.エラー処理
JavaScriptはJavaのようなエラー処理メカニズム、すなわちtry catch finallyを提供する.例:
try{
    var s = null;
    s.length; // TypeError: Cannot read property 'lenght' of null
}catch(err){
    console.log('null pointer' + err);
}finally{
    // clear resource.
}

ここでcatchは必須ではなく、finallyも必須ではありませんが、どちらか一方が必要で、finallyは必ず実行されます.
エラータイプ,TypeErrorはErrorに継承され,ReferenceErrorなどのエラー処理対象もあり,キャプチャしたe,instanceで判断できる具体的なErrorタイプである.
また、javaのように例外、キーワードthrowを投げ出すこともできます.
var n = 'ss';
if(isNaN(n)){
    throw new Error('input error');
}

実際、JavaScriptでは、数値、文字列など、任意のオブジェクトを放出できます.しかし、やはりErrorオブジェクトを投げたほうがいいです.
2.エラー伝播
上へ渡すと、JavaのExceptionのようにJavaは呼び出しスタック全体を呼び出し、JSも同じです.
3.非同期エラー処理
JavaScriptエンジンはイベント駆動の実行エンジンであり、コードは常に単一スレッドで実行され、コールバック関数の実行は次の条件を満たすイベントが現れるまで実行されません.
function printTime() {
    throw new Error();
}

try {
    setTimeout(printTime, 1000);
    console.log('done');
} catch (e) {
    alert('error');
}

その中でwindow.setTimeout(func, delay, pars...)func関数はタイムアウト後に実行されます.非同期なのでsettimeoutはすぐに実行が完了し、次の印刷logを実行し、タイムアウト後に実行がトリガーされ、throw errorになりますが、catchにはなりません.