今回は、JS での try-catch ステートメントとエラーの型の使用方法について説明します。以下は、JS での try-catch ステートメントとエラーの型の使用上の注意点です。
アプリケーション ロジックは特定の関数を呼び出す理由を常に知っているため、エラーの処理に最適です。 try-catch の catch ブロックを空のままにしないでください。エラーを処理するために常に何かを記述する必要があります。たとえば、次のようなことは行わないでください:
try { somethingThatMightCauseAnError(); } catch (ex) { // do nothing}
エラーが発生する可能性が高いことがわかっている場合は、そこから回復する方法を確実に知っています。エラーから正確に回復する方法は、開発モードと実際に運用環境に導入する場合では異なりますが、それは問題ありません。最も重要なことは、エラーを無視するのではなく実際に対処することです。
ECMA-262 仕様では 7 つのエラー タイプが指摘されています。これらの型は、さまざまなエラー条件が発生したときに JS エンジンで使用されます。もちろん、手動で作成することもできます。
エラー: すべてのエラーの基本的なタイプ。実際、エンジンはこの種のエラーをスローすることはありません。
EvalError: eval() 関数によるコードの実行中にエラーが発生した場合にスローされます。
RangeError: 数値がその境界を超えるとスローされます。たとえば、長さ -20 の配列 (new Array(-20);) を作成しようとした場合です。通常のコード実行では、このエラーが発生することは非常にまれです。
ReferenceError: 予期したオブジェクトが存在しない場合にスローされます。たとえば、null オブジェクト参照で関数を呼び出そうとした場合などです。
SyntaxError: コードに構文エラーがある場合にスローされます。
TypeError: 変数が予期された型ではない場合にスローされます。たとえば、新しい 10 または true の 'prop' です。
URIError: 不正にフォーマットされた URI 文字列が encodeURI()、encodeURIComponent()、decodeURI()、または decodeURIComponent() などの関数に渡されるとスローされます。
さまざまな種類のエラーを理解すると、より簡単に対処できるようになります。すべてのエラー タイプは Error から継承されるため、instanceof Error でタイプをチェックしても有用な情報は得られません。特定のエラー タイプをチェックすることで、エラーをより確実に処理できます。
try { // 有些代码引发了错误} catch (ex) { if (ex instanceof TypeError) { // 处理TypeError错误 } else if (ex instanceof ReferenceError) { // 处理ReferenceError错误 } else { // 其他处理 } }
独自のエラーをスローし、それがエラーではなくデータ型である場合、独自のエラーとブラウザのエラー タイプを簡単に区別できます。ただし、実際の型のエラーをスローすることには、他の型のオブジェクトをスローすることに比べていくつかの利点があります。
まず第一に、上で説明したように、エラー メッセージはブラウザの通常のエラー処理メカニズム内で表示されます。次に、ブラウザは、スローされた Error オブジェクトに追加情報を付加します。この情報はブラウザーごとに異なりますが、行番号や列番号などのエラーのコンテキスト情報が提供され、一部のブラウザーではスタックとソース コードの情報も提供されます。もちろん、Error コンストラクターを使用すると、自分がスローしたエラーとブラウザーのエラーを区別できなくなります。
解決策は、独自のエラー タイプを作成し、それを Error から継承させることです。このアプローチにより、ブラウザーによってスローされたエラーとは異なる追加情報を提供できます。カスタム エラー タイプは、次のパターンを使用して作成できます。
function MyError (message) { this.message = message; } MyError.prototype = new Error();
このコードには 2 つの重要な部分があります。メッセージ属性、ブラウザーが認識する必要があるエラー メッセージ文字列、およびプロトタイプを Error のインスタンスに設定することで、JS エンジンに対してエラー オブジェクトとして識別されます。次に、MyError のインスタンス オブジェクトをスローして、ブラウザーがネイティブ エラーのように応答できるようにします。
throw new MyError('Hello World!');
念のため言っておきますが、この方法は IE8 以前のブラウザではエラー メッセージを表示しません。代わりに、一般的な「例外がスローされましたがキャッチされません」というメッセージが表示されます。この方法の最大の利点は、カスタム エラー タイプが独自のエラーを検出できることです。
try { // 有些代码引发了错误} catch (ex) { if (ex instanceof MyError) { // 处理自己的错误 } else { // 其他处理 } }
自分でスローしたエラーをすべて常にキャッチできるのであれば、IE の小さな愚かさは何の意味もありません。適切なエラー処理システムから得られるメリットは非常に大きいです。この方法により、開発者にエラーを正しく処理する方法を知らせる、より柔軟な情報が提供されます。
この記事の事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨書籍:
以上がJS try-catch ステートメントとエラー タイプの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。