JS try-catch ステートメントとエラー タイプの使用法

php中世界最好的语言
リリース: 2018-06-04 10:48:55
オリジナル
1961 人が閲覧しました

今回は、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 サイトの他の関連記事に注目してください。

推奨書籍:

Web 開発で null 比較を回避する方法

Web 開発でグローバル変数の使用を避ける必要がある理由

以上がJS try-catch ステートメントとエラー タイプの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!