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 が機能しない理由の詳細

推薦する

hrefパラメータ転送における中国語の文字化けについて

パラメータを渡すために href が必要で、パラメータが中国語の場合、文字化けした文字が表示されます...

GDBデバッグMySQL実戦ソースコードコンパイルとインストール

ソースコードをダウンロード git クローン https://github.com/mysql/my...

ウィンドウの中央にブロック要素の位置を設定する方法

ウィンドウの中央にブロック要素の位置を設定する方法ブロック要素をウィンドウの中央に配置する上記の方法...

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする yum インストール -y memcached #memcac...

Vueはタブを切り替えてデータの状態を維持する3つの方法を実装します

Vue でタブ切り替えを実装する 3 つの方法1. v-showはコンテンツの切り替えを制御します1...

MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。

目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...

MySQL で '%' を含むフィールドをクエリする方法の詳細な説明 (ESCAPE の使用法)

SQLのlike文では、例えば SELECT * FROM user WHERE username...

衝突検出を実装するためのjs

この記事の例では、衝突検出を実装するためのjsの具体的なコードを参考までに共有しています。具体的な内...

pdf.js を使用して Vue で PDF ファイルをプレビューする方法

ページ上で PDF をプレビューすると、一部のファイルは印刷またはダウンロードできません。現時点では...

JS 継承の詳細

目次序文準備する要約する継承方法プロトタイプ継承プロトタイプチェーン継承コンストラクタの借用(クラス...

遭遇したいくつかのブラウザ互換性の問題について簡単に説明します

背景ブラウザの互換性の問題を解決するのは非常に面倒なことです。高度な技術はそれほど必要ありませんが、...

docker-maven-plugin の詳細な使用方法

目次Docker-Maven-プラグインMavenプラグインの自動デプロイメント手順1. ホストマシ...

概要ページでのフロートとクリアフロート

1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...

MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ

一般的に、MySQL はデフォルトでさまざまなストレージ エンジンを提供しており、次のように表示され...

Docker mongoDB 4.2.1 をインストールし、Springboot ログを収集する詳細な手順

1: dockerにmongodbをインストールするステップ1: dockerにmongodbをイン...