5

主に、SOで見られるスニペットで例外処理が使用されているのを見たことがなく、2年間javascriptを書いていて、javascriptに例外処理があることすら知りませんでした。他の言語では例外処理がよく見られますが、javascript にとって例外処理はそれほど重要ではありませんか? javascript で常に例外処理を使用する必要があり、使用すべきではない典型的なシナリオは何ですか?

このルールは JavaScript にも適用されますか?

「try」-「catch」ですべてのブロックをラップしないのはなぜですか?

4

3 に答える 3

4

JavaScript で最も一般的な戦略は、防御的に記述し、徹底的にテストすることです。

たとえば、次のようなテストで正方形から始まるライブラリがあります。

var element;

if (document && document.getElementById) {
  element = document.getElementById('foo');
}

if (element) {
  // use element
}    

isHostMethodなどのテストを使用して、より一般的な形式で記述します。

try..catch は、機能の検出やその他の防御が利用できない場合の最後の手段としてのみ使用してください。ホスト オブジェクトをテストすると、役に立たない結果が返されたり、エラーがスローされたりすることがあります (たとえば、すべての XMLHttpRequest スクリプトは try..catch を使用します。これは、IE でのサポートのテストが決定的ではないため、それを呼び出して何が起こるかを確認するしかないためです)。

ほとんどのブラウザではデフォルトでエラーが表示されないため、軽微なスクリプト エラーは大きな問題にはなりません。ほとんどの重要なページは、ブラウザ、設定、ユーザーのネットワーク環境などに応じて、常にエラーをスローします (SO を含む)。ユーザーは、機能が不足していることに気付いている場合と気付いていない場合があるため、機能を拒否されるだけです (実際に恩恵を受ける可能性があります)。したがって、典型的な戦略は、ページをスクリプトなしで機能させ、次にスクリプト機能を追加して使いやすさを向上させることです。そうすれば、ページの有用性を妨げる可能性のあるエラーが発生した場合に、常に基本機能にフォールバックできます。

この戦略は常に可能であるとは限りませんが、良い出発点であり、安易に放棄すべきではありません。

于 2013-04-11T11:51:11.613 に答える
1

C では、常にリターン コードをチェックすることをお勧めします。

次に、C++ と例外があります。Javaはそれらを非常に頻繁に使用しており、あまりにも重すぎます(たとえばInteger.parseInt、チェックしたいだけの場合でも、何かが文字列である場合は例外を処理する必要があります).

JavaScript には、例外処理の別の概念があります。例外処理のためのコールバックを提供することをお勧めします。jQuery セレクターは、要素が見つからない場合でも「機能」し、0 要素のセレクターのみを取得します。

したがって、例外をスローするコードを使用している場合は、それを処理する必要があります。ただし、例外のスローを避け、コールバックによるエラー処理をサポートする必要があります。

于 2013-04-11T11:46:13.923 に答える