Javascriptのtry catchの2つの機能についてお話しましょう

Javascriptのtry catchの2つの機能についてお話しましょう

プログラムは上から下へ順番に実行され、いくつかの制御文によって実行経路を変更することができます。制御文の影響を受けて、プログラムの最終的な実行経路が制御フローとなります。

js の制御文には、if、for、while、try catch などがあり、プログラムの方向を変更します。

プログラムはデータに対して動作します。プログラムの実行中、つまり制御フローの進行に伴って変化するデータは、データフローと呼ばれます。

当然のことながら、データ フローは制御フローに依存しており、プログラム分析におけるデータ フロー分析も、まず制御フロー分析を実行する必要があります。

たとえば、次のようなコードがあります。

定数a = 1;
bとします。

(a === 1)の場合{
    '1111' です。
} それ以外 {
    '2222' を返します。
}

a は 1 なので、 b = '1111'; が実行されます。これが制御フロー、つまりプログラムが最終的に実行するコードです。プログラムの方向を分析し、デッドコードの削除などの最適化を実行するために使用できます。

制御フローが実行されると、b に値 2222 が割り当てられます。これがデータ フロー、つまり値の変更プロセスであり、特定のステートメント内の変数の値を分析するために使用できます。

プログラムは、異なるデータに対して異なる処理を実行します。データが間違っている場合、処理プログラムはそれを処理できず、エラーが報告され、後続の制御フローが中断されます。たとえば、データが空である、データ形式が正しくないなどです。このとき、エラーを処理するために try catch が使用されます。これは例外処理とも呼ばれます。

例外処理は次の 2 つの目的で行います。

1. 誤ったロジックを裏付ける根拠を提供します。

たとえば、パラメータの解析でエラーが発生した場合は、catch でデフォルト値を割り当てます。このエラーは処理後に再度報告する必要はありません。この場合、try catch もロジックの一部であり、if else と同等です。

2. 報告されたエラーについて、よりシナリオに基づいた説明を提供します。

JSエラーはJSエンジンによってスローされます。たとえば、nullオブジェクトのメソッドを呼び出すとTypeErrorが報告され、宣言されていない変数を使用すると

参照エラー。特定のエラーはさまざまなシナリオで報告され、さまざまな意味を持ちます。

このオブジェクトがユーザー入力から取得された場合、ユーザー入力が間違っていることを意味します。このオブジェクトがサーバーから取得された場合、サーバーから返されたデータが間違っていることを意味します。異なるシナリオでは、同じエラーがより具体的な意味を持つため、try catch を実行する必要があります。次に、シナリオ情報を含むエラーの説明を含むカスタム エラーをスローします。

多くのライブラリやフレームワークは、この点で優れた機能を果たします。報告されたエラーにはすべて、特定のシナリオ情報と解決策が含まれています。エラー番号によって管理されるものもあり、解決策は errorno を通じて照会できます。これはエラーのカスタマイズされた処理です。

ただし、ビジネス コードで報告されるエラーの多くはこの方法では処理されず、元のエラーが直接報告されます。例外監視プラットフォームを使用して、グローバルにスローされるエラーを収集します。これらのエラーは、比較的基本的な情報であることが多いです。エラーの場所とスタックが含まれていますが、ソース コードを調べて問題を特定する必要があります。

たとえば、オブジェクトが空であるというエラーが報告されますが、どのオブジェクトが空なのか、その理由は何なのか、どのように解決するのか、数値があるかどうかをどのように確認すればよいでしょうか。

さまざまなエラーをキャッチし、特定のシナリオに対してカスタム エラーをスローできれば、もっと良いと思いませんか?サードパーティのライブラリはこれを非常にうまく実行しますが、ビジネス コード内のシナリオベースのカスタム エラーに注意を払う人はほとんどいません。

もちろん、フロントエンドのビジネス コードのユーザーはインターフェイスを通じてソフトウェアを使用するため、実際には、さまざまなエラーに対していくつかの UI プロンプトを提供するだけで十分です。ライブラリコードは開発者向けなので、さまざまなエラーをシナリオベースで説明し、エラー番号と解決策も提供する必要があります。

しかし、ビジネス コードではエラーをサードパーティ ライブラリ コードのように扱う必要があると思います。意味のないネイティブ エラーを報告せず、特定の意味を持つカスタム エラーを報告します。これにより、トラブルシューティングと問題解決がはるかに簡単になります。

ただし、シナリオベースのカスタム エラーは問題のトラブルシューティングに役立ちますが、コードによって報告される可能性のあるエラーを理解した上で行う必要があります。報告するエラー メッセージが実際のエラーの原因と異なる場合、問題のトラブルシューティングが難しくなります。元のエラーを報告することをお勧めします。

要約する

プログラムの実行プロセスは制御フローであり、制御文の影響を受けます。実行プロセス中にデータは変化します。データの変化はデータフローと呼ばれます。制御フローとデータフローは、プログラム分析でよく分析される 2 つの側面です。

エラーは制御フローを中断するため、try catch を通じてエラーに対処する必要があります。

エラー処理には 2 つの目的があります。

1 つは、if else と同等のフォールバック処理を実行することであり、エラーを報告する必要はありません。

1 つは、ネイティブ JS エラーのシナリオベースの説明を作成し、より具体的な情報を含むエラー オブジェクトを作成してそれを破棄することです。

多くのライブラリはこれを非常にうまく実行し、エラー番号と解決策も提供します。ただし、多くのビジネス コードでは、スローされたエラーに対するシナリオベースのパッケージ化を行わずに、UI 上でユーザーにフィードバックを提供するだけです。その結果、エラー監視プラットフォームによって収集されるエラーは比較的基本的なエラーとなり、トラブルシューティングのためにソース コードをチェックする必要があります。ライブラリ コードのようにシナリオ ベースのエラー パッケージングも実行できれば、問題のカウントとトラブルシューティングがはるかに簡単になります。これは、ほとんどの JavaScript エンジニアが実行していないことです。

Javascript における try catch の役割に関するこの記事はこれで終わりです。Javascript における try catch の役割についてさらに詳しく知りたい場合は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • js での例外処理 try...catch の紹介
  • JavaScript での try catch の使用
  • JavaScript Try...Catch ステートメントの使い方
  • JS でのコード実行における try catch のパフォーマンスへの影響の分析
  • js の try、catch、finally の実行ルールの例の分析
  • JavaScript の try...catch...finally を理解する
  • JavaScript における try catch 例外捕捉メカニズムの使用法の分析
  • JS 例外処理 try..catch ステートメント関数と例
  • JavaScript での try catch アプリケーションの概要
  • JavaScript ステートメント エラーのスロー、トライ アンド キャッチの例の分析

<<:  JDBC-idea で mysql をインポートして java jar パッケージに接続する (mac)

>>:  Linux でメモリ使用量を確認する方法

推薦する

nginx ip ブラックリストの動的禁止の例

ウェブサイトが悪意を持ってリクエストされた場合、IP アドレスをブラックリストに登録することは重要な...

docker compose の使い方の詳しい説明

目次Docker Compose の使用シナリオ基本的なデモ基本的な操作とメンテナンスdocker-...

CentOS 7 で Docker のポート転送をファイアウォールと互換性のあるように設定する方法

CentOS 7 では、次のようなコマンドを使用してホスト ポートをコンテナー ポートにマッピングす...

jQuery はラブエフェクトをクリックする

この記事では、jQueryのクリック時のラブエフェクトの具体的なコードを参考までに共有します。具体的...

CSS Houdini でダイナミックな波効果を実現

CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...

MySQL を使用して Excel でデータ生成を完了する方法

Excel は、データ分析に最もよく使用されるツールです。この記事では、MySQL と Excel ...

Docker デプロイメント Springboot プロジェクト例の分析

この記事は主に、docker デプロイメント springboot プロジェクトのサンプル分析を紹介...

nginx proxy_cache キャッシュ設定の詳細な説明

序文:私は仕事柄、オンラインライブストリーミングの分野に携わっており、ビデオの再生やダウンロードには...

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

CCS におけるマージン: トップ崩壊問題を解決する

HTML 構造は次のとおりです。 CCS 構造は次のとおりです。 ページ効果図は次のとおりです。 こ...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...

ウェブページのエンコードにおける GB2312、GBK、UTF-8 の違い

まず、GB2312、GBK、UTF-8 はすべて文字エンコーディングであることを理解する必要がありま...

マークアップ言語 - HTML を学んだ後に何を学ぶべきか?

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Vue ページをリフレッシュするために provide と injection を適用する

目次方法1: 関数を直接呼び出す方法2: provide / inject (静的更新) を使用する...