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 でメモリ使用量を確認する方法

推薦する

dl、dt、dd リスト ラベルの例

dd タグと dt タグはリストに使用されます。通常は <ul><li> タ...

MySQL インポート csv エラーの 4 つの解決策

これは今日私が踏んだ4つの落とし穴を記念したものです...落とし穴1:地元のせいエラー:エラー 39...

Javascript における非同期待機の詳細な理解

この記事では、async/await がすべての JavaScript 開発者にとって非同期プログラ...

Linuxの貼り付けコマンドの使い方

01. コマンドの概要貼り付けコマンドは各ファイルを列ごとに結合します。これは、2 つの異なるファイ...

インライン要素とブロック要素とは何ですか?

1. インライン要素はコンテンツの幅のみを占めますが、ブロック要素はコンテンツの量に関係なく行全体を...

CSS を使用して固定ナビゲーションと左右スライドを備えたスクロール バーを作成する方法

上に示すように、ナビゲーションは上部に固定されており、左右にスライドしてさらにオプションをクリックで...

Vueプロジェクトでパラメータジャンプ機能を実装する

ページの説明:​ メインページ: 名前 —> shishengzuotanhuichaxun ...

MySQLカスケードレプリケーションの実装方法の例

いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデー...

nginxディレクトリパスをリダイレクトする方法

ドメイン名に続くパスがデフォルトの Web ディレクトリではなく、ローカル ディスク上の他のディレク...

Linux における「!」の知られざる使用法のまとめ

序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...

MySQL が group by をサポートしない場合の解決策の概要

MySQL 5.7.x の最新バージョンをダウンロードしてインストールしました。デフォルトでは、on...

WIN10 システムと Docker 内部コンテナ IP 間の通信方法

1. Windows 版の Docker をインストールしたら、Docker クイックスタート ター...

HTMLボタンを中央に配置する方法

HTML ボタン自体を中央に配置するにはどうすればよいでしょうか? このアイデアは簡単に見つかります...

経験者のHTMLの書き方と理由の分析

1. ナビゲーション: 順序なしリストとその他のラベル要素ナビゲーションを記述するために最も一般的に...

MySQLインデックスの使用に関するヒントと注意事項

1. インデックスの役割一般的なアプリケーション システムでは、読み取りと書き込みの比率は約 10:...