web-dev-qa-db-ja.com

JavaScriptでいつtry / catchを使用する必要がありますか?

JavaScriptを使用して通常のWebアプリケーションを開発している場合、try/catchステートメントは通常必要ありません。 チェックされた例外 、ファイルIOまたはJavaScriptのデータベース接続はありません。

try/catch JavaScriptで役立つステートメント?いつ使えますか?

33
Sanghyun Lee

実行中のコードが例外をスローする可能性がある場合は常に使用してください。自分のエラーをthrowできることを忘れないでください—ほとんどのtry…catch私が使用するものは、私自身の例外をキャッチするためのものです。

14
Quentin

try...catchブロックは通常、使用量を減らすことをお勧めします。これは、使用する言語に依存しません。

これの主な理由は、catchブロックのコストです。また、別の理由は、多くのステートメントを1つのtry...catchブロックでラップすると、catchブロックで何が主な問題であったかが正確にわからないことです。

入力検証やif...elseブロックなどの手法を使用して、例外(エラー)が発生する可能性を減らすことをお勧めします。たとえば、try...catchを使用する代わりに、ユーザーから取得した番号を使用する場合は、次を使用できます。

if (isNaN(numberVariable))
{
    alert('you should enter a valid number');
}
34
Saeed Neamati

Try/catch/finallyが役立つと思うシナリオの1つは、nullが任意のレベルでポップアップする可能性がある深くネストされたオブジェクトを使用することです。たとえば、次のことを考慮してください。

var something = one.two.three.four.five;

この「get」を100%の安全性で実行するには、少し冗長なコードを作成する必要があります。

if(one && one.two && one.two.three && one.two.three.four)
   something = one.two.three.four.five;

ここで、変数名が現実的で長く、非常に醜いコードifステートメントをすぐに取得すると想像してください。

「他の」シナリオを気にせず、オブジェクトが必要かどうかだけを気にしない場合は、try/catch/finallyを使用してこれを単純化する傾向があります。

var something;
try { something = one.two.three.four.five; }
catch { something = "default"; }
finally { doSomething(something); }
28
parliament

私はこれを ここに投稿 から見つけました:

いつtry-catchを使用する必要がありますか?

Try-catchステートメントは、ユーザーからエラーを隠したいとき、またはユーザーの利益のためにカスタムエラーを生成したいときはいつでも使用する必要があります。まだ理解していない場合は、try-catchステートメントを実行すると、ブラウザの通常のエラー処理メカニズムが無効になります。

大規模なアプリケーションを構築するときに、これがもたらす可能性のある利点をおそらく理解できます。アプリケーションのフローで発生する可能性のあるすべての状況のデバッグには時間がかかることが多く、多くの可能性が誤って見落とされる可能性があります。もちろん、適切なバグテストがあれば、見落とされるべき領域はありません。ただし、try-catchステートメントは、開発中に予測されなかった異常な状況で失敗する可能性のあるコードの領域での優れたフォールバックとして機能します。

Try-catchステートメントによって提供されるもう1つの利点は、技術的すぎるエラーメッセージを、とにかく理解できないユーザーから隠すことです。

Try-catchを使用するのに最適なタイミングは、何らかの理由で、制御できないエラーが発生すると思われるコードの部分です。

いつtry-catchを避けるべきですか?

エラーが発生することがわかっている場合は、try-catchステートメントを使用しないでください。この場合、問題をマスクするのではなく、デバッグする必要があります。 try-catchステートメントは、エラーが発生する可能性があると思われるコードのセクションでのみ実行する必要があります。また、考えられる状況が圧倒的に多いため、エラーが発生するかどうか、または発生する時期を完全に確認することはできません。後者の場合、try-catchを使用するのが適切です。

25
luongnv89

外部のJavascriptライブラリとウィジェットは、インスタンス化エラーの例外を利用することがよくあります。次のことを行う必要があるのは一般的です。

try {
  var w = new Widget();
}
catch (e) {
  // widget failed
}
4

まあ、私は個人的に(間違っていますか?)それを使用します。正しく実行されるかどうかわからないコードを書くとき、ユーザーはエラーについて知る必要はありません。

それ以外は、HTMLマークアップで「action」プロパティを定義できるいくつかのユーザーコントロールで使用しており、javascriptは次のようにそのアクションを実行しようとします。

_try{
     window['method'](args);
}catch(e){
     try{
         window['optionalExceptionHandler'](e, args);
     }catch(e){ return; }
}
_

(私はそれがeval() xDよりも優れていると思うのが好きです)

1
Thor Jacobsen