JavaScript 高度なカスタム例外

JavaScript 高度なカスタム例外

序文:

実際のプログラミングでは、例外(コードエラー)をスローすることは最も普通のことですが、例外の処理方法は人によって異なります。例外に遭遇すると、通常は例外を解決したり、何らかの方法で例外を隠したりしますが、 JavaScriptでは、例外に遭遇したときにプログラムを正しく実行できるように、例外処理メカニズムの完全なセットが用意されています。したがって、実際のアプリケーションにおける例外処理の重要性は疑う余地がありません。完全な Web アプリケーションには、完全な例外処理メカニズムが必要です。

この記事ではJavaScript処理を紹介します

1. コンセプト

1.1 エラーと例外とは何ですか?

いわゆるエラーは、プログラミング プロセスにおいてプログラムが正常に実行されなくなる状態であり、例外とも呼ばれます。

JavaScriptでは、すべての例外はErrorオブジェクトです。例外が発生すると、エラーの説明を含むErrorオブジェクトがスローされます。

JavaScriptが提供する例外処理ステートメントを使用すると、発生するエラーを構造化された方法でキャプチャし、例外処理コードをコアビジネス コードから分離できます。

1.2 異常の分類

実際の開発では、例外は主に次の 3 種類に分けられます。

  • 論理エラー:論理エラーは、追跡するのが最も難しいタイプのエラーです。これらのエラーは、プログラム操作のロジックのエラーが原因で発生し、スクリプト プログラムが期待どおりの結果を得られなくなります。
  • JavaScript 固有のエラー:これらは、 JavaScript構文エラー、コード参照エラー、型エラーなど、最も一般的なタイプのエラーです。JavaScript エンジンは、これらのエラーを自動的にトリガーします。
  • 開発者によって発生したエラー:これらは通常、開発者が独自のニーズを満たすために定義したエラーです。

2. 例外処理

2.1try...catch ステートメント

try...catch ステートメントは、JavaScript で例外を処理する標準的な方法です。構文構造は次のとおりです。

試す {
     // テスト用のコードブロック }
 キャッチ(エラー) {
     // エラーを処理するコードブロック } 

パラメータ:

  • try : ステートメントを使用すると、実行中にエラーを検出するコード ブロックを定義できます。
  • catch : ステートメントを使用すると、try ブロックでエラーが発生した場合に実行されるコード ブロックを定義できます。
  • err : テスト コード ブロック内のエラーに対応する型の Error オブジェクトを表す識別子。

サンプルコードは次のとおりです。

試す {
  // エラーがあるかどうかをテストするために使用されるコードブロック console.log(v) // この時点では v は定義されていないため、例外がスローされます } catch (error) {
  // 例外をスローすると、このコード ブロックが実行されます console.log('上記のコードにはエラーがあります')
}

**try** と **catch** ステートメントがペアで表示されることに注意する価値がある。

2.2 finally文

finallyステートメントは終了ブロックとも呼ばれます。このステートメント ブロックは、結果がエラーであるかどうかに関係なく、 trycatchステートメントが完了した後に実行されます。

構文構造は次のとおりです。

試す {
     // テスト用のコードブロック }
 キャッチ(エラー) {
     // エラーを処理するコードブロック }  
ついに {
     // try catch の結果に関係なく実行されるコード ブロック}

サンプルコードは次のとおりです。

// 変数v
試す {
  // エラーがあるかどうかをテストするために使用されるコードブロック console.log(v) // この時点では v は定義されていないため、例外がスローされます } catch (error) {
  // 例外をスローすると、このコード ブロックが実行されます console.log('上記のコードにはエラーがあります')
ついに
  console.log('私は処刑されなければならない')
}

2.3throw文

throw****ステートメントは、ユーザー定義の例外をスローするために使用されます。この例外は任意のデータ型にすることができます。 throwステートメントが実行されると、現在の実行が停止されます。catch catchがある場合はcatchブロックが実行され、ない場合はループから抜け出します。

構文の形式は次のとおりです。

スロー式;


expression : スローされる式

例外をスローするには、 throwステートメントを使用します。例外をスローする場合、 expression例外の内容を指定します。

サンプルコードは次のとおりです。

// "error" をスローします // error を出力します false をスローします // false を出力します


もちろん、 throw後にオブジェクトが続くこともできます。

3. エラーオブジェクト

エラー オブジェクトは、Error コンストラクターを通じて作成できます。実行時エラーが発生すると、 Errorのインスタンスがスローされます。一般的に、 Errorタイプのエラーはまれであり、そのほとんどは他のエラー タイプですが、他のエラー タイプは Error から継承されます。

Error オブジェクトは主に、ユーザー定義の例外の基本オブジェクトとして使用されます。

Error オブジェクトに加えて、JavaScript では次の定義済みのエラー タイプも提供されます。

エラー名説明する
評価エラーeval() 関数でエラーが発生しました。
範囲エラー範囲外エラーが発生しました
参照エラー不正な参照が発生しました
構文エラー構文エラーが発生しました
タイプエラー型エラーが発生しました
URIエラーencodeURI() でエラーが発生しました

エラーには主に 2 つのプロパティがあります。

財産説明する
名前エラー名を設定または返す
メッセージエラーメッセージ(文字列)を設定または返します

Error オブジェクトのインスタンスを作成するための構文形式は次のとおりです。

新しいエラー([メッセージ])

パラメータ:

message : オプション、エラーメッセージの説明

他の定義済み型の作成構文はエラーと同じです。

3.1 カスタム例外タイプ

JavaScriptが提供する例外タイプが満足できない場合は、独自の例外タイプをカスタマイズできます。このカスタム例外タイプは通常、Error 例外タイプを継承し、 instanceofキーワードを使用して例外タイプを示すことができます。

まず、カスタム例外タイプ用にNode.jsで提供されるプロパティとメソッドを見てみましょう。

以下のように表示されます。

error.stack : プロパティ: 文字列の最初の行が<error class name>: <error message>,としてフォーマットされ、一連のスタック フレーム (各行は "at " で始まる) が含まれる文字列を返します。各フレームは、エラーの発生原因となったコード内の呼び出しポイントを記述します。
Error.captureStackTrace(targetObject[, constructorOpt])メソッド: targetObjectオブジェクトを表し、constructorOpt はオブジェクトのコンストラクターを表します。目的: targetObjectに.stack属性を作成する

サンプルコードは次のとおりです。

関数 MyError(メッセージ) {
  this.message = メッセージ
  this.name = 'MyError'
  /*
   * Error.captureStackTrace(targetObject[, コンストラクターOpt])
   * パラメーター targetObject -> オブジェクトを表します * パラメーターconstructorOpt -> オブジェクトのコンストラクターを表します * targetObject に .stack プロパティを作成し、呼び出しにより Error.captureStackTrace() が呼び出された場所の文字列が返されます。
   */
  Error.captureStackTrace(これ、MyError)
}

MyError.prototype = 新しいError()
MyError.prototype.constructor = MyError

// * node.js 環境では、new Error は直接例外をスローします。これは node.js 環境には適用されません。 // function MyError(message) {
// this.name = 'MyError';
// this.message = message || 'デフォルトメッセージ';
// this.stack = (新しい Error()).stack;
// }
// MyError.prototype = Object.create(Error.prototype);
// MyError.prototype.constructor = MyError;

試す {
  新しいMyError('wrong')をスローします
} キャッチ (e) {
  コンソール.log(e)
}

結論:

JavaScript での例外処理は、実際の開発では通常、次の 2 つのことだけを行います。

  • 例外をプロンプトメッセージに変更する
  • エラー情報を表示するには、例外を例外ログに出力します。

JavaScript の高度なカスタム例外に関するこの記事はこれで終わりです。より関連性の高い JavaScript カスタム例外コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springboot2.0はカスタム例外を処理し、jsonを返します
  • Java 構築メソッド super とカスタム例外スローコレクションの詳細な使用方法

<<:  MYSQL メタデータ ロック (MDL ロック) の理論とロック タイプ テスト

>>:  CSS 属性値 clear:right が機能しない理由の詳細

推薦する

Dockerを使用してGitlabを素早くデプロイする方法

1. GitLabイメージをダウンロードする docker pull gitlab/gitlab-c...

Dockerfile ビルド中に発生する「/bin/sh: pip: コマンドが見つかりません」という問題の解決方法

記述した Dockerfile の内容は次のとおりです。 Python:3.6.8 から pip i...

Vue + OpenLayers クイックスタートチュートリアル

Openlayers は、WebGIS クライアント向けのモジュール式で高性能かつ機能豊富な Jav...

js 属性オブジェクトの hasOwnProperty メソッドの使用

オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...

携帯電話に GreasyFork js スクリプトをインストールするチュートリアル

目次序文1. Iceraven ブラウザ (Firefox) (Android) 2. (アンドロイ...

mysql-8.0.11-winx64.zip の詳細なインストール チュートリアル

zip インストール パッケージをダウンロードします。 MySQL8.0 For Windows z...

MySQL でインデックスとして B+Tree を使用する利点は何ですか?

目次データベースにインデックスが必要なのはなぜですか?インデックスが B+Tree データ構造を使用...

HTMLテキストオーバーフローの2つの一般的な解決策は省略記号を表示することです

方法1: CSSオーバーフロー省略を使用して解決する解決策は次のとおりです。 CSSコード: ディス...

Nginx_geo モジュールを使用して CDN スケジュールを設定する方法

NginxのGeoモジュールの紹介geo ディレクティブは、ngx_http_geo_module ...

Linuxサービスの監視と運用および保守

目次1. psutilパッケージをインストールする次に、オペレーティングシステム内のすべてのサービス...

MySQL はどのようにしてマスターとスレーブの同期を実現するのでしょうか?

マスタースレーブ同期 (マスタースレーブレプリケーションとも呼ばれる) は、マスタースレーブデータの...

CentOS 8 VMware 仮想マシンがインターネットにアクセスするための静的 IP ネットワーク カードの設定の詳細な説明

最初のステップ: VMwareで、「編集」-「仮想ネットワークエディタ」をクリックします。下図に示す...

MySQL 学習ノート: 完全な SELECT ステートメントの使用例と詳細な説明

この記事では、MySQL 学習ノートの select ステートメントの完全な使用方法を例を使用して説...

Nginx と Lua を使用した JWT 検証の概要

目次序文Lua スクリプトnignx.conf の設定Dockerfileの設定序文データベースやそ...

Vueはズームイン、ズームアウト、ドラッグ機能を実装しています

この記事では、参考までに、ズームインとズームアウトのドラッグ機能を実現するためのVueの具体的なコー...