この記事では、JavaScript の try catch ステートメントを理解し、try catch ステートメントの 2 つの機能を紹介します。
プログラムは上から下へ順番に実行されますが、同時にいくつかの制御文によって実行ルートを変更することができます。プログラムの実行経路は制御フローです。
js の制御ステートメントには、if、for、while、try catch などが含まれます。これらはすべてプログラムの方向を変更します。
プログラムはデータを操作しますが、プログラムの実行、つまり制御の流れに応じて変化するデータをデータフローと呼びます。
データフローは制御フローに依存するのは当然ですが、プログラム解析におけるデータフロー解析も、まず制御フロー解析が必要です。
たとえば、このコード:
const a = 1; let b; if (a === 1) { b = '1111'; } else { b = '2222'; }
a が 1 であるため、b = '1111';
になるまで実行されます。これが制御フローです。このコードは、プログラムの方向を分析し、デッド コードの削除などの最適化を行うために使用できます。
制御フローが実行されると、 b には値 2222 が割り当てられます。これはデータ フロー、つまり値を変更するプロセスであり、変数の値を分析するために使用できます。ある発言。
プログラムは、異なるデータに対して異なる処理を実行します。データにエラーがある場合、処理プログラムはそのデータを処理できず、エラーが報告され、その後の制御フローが中断されます。たとえば、データが空である、データ形式が間違っているなどです。現時点では、エラー処理は try catch (例外処理とも呼ばれます) を通じて実行する必要があります。
例外処理は 2 つの目的で行われます:
エラー ロジックの徹底的な処理を行うため。
たとえば、パラメータの解析でエラーが発生した場合は、catch にデフォルト値を割り当てます。このエラーが処理された後は、再度報告する必要はありません。この場合、try catch もロジックの一部であり、if else と同等です。
報告されたエラーについて、よりシナリオに基づいた説明を提供します。
JS エラーは JS エンジンによってスローされます。たとえば、null オブジェクトのメソッドを呼び出すと TypeError が報告され、宣言されていない変数を使用すると ReferenceError が報告されます。特定のエラーはさまざまなシナリオで報告され、さまざまな意味を持ちます:
このオブジェクトがユーザーから入力された場合、ユーザー入力にエラーがあります。このオブジェクトがサーバーから取得された場合、はい、それは意味しますサーバーから返されたデータが正しくありません。異なるシナリオでは、同じエラーがより具体的な意味を持つため、キャッチを試みる必要があります。次に、シーン情報を含むエラー説明を含むカスタム エラーをスローします。
多くのライブラリとフレームワークは、これを適切に実行します。報告されるエラーには、特定のシナリオ情報と解決策さえも含まれています。一部はエラー番号で管理され、解決策を見つけるためにエラー番号で管理できます。これはカスタマイズされたエラー処理です。
ただし、ビジネス コードで報告される多くのエラーはこの方法では処理されず、ネイティブ エラーが直接報告されます。例外監視プラットフォームを使用して、グローバルにスローされるいくつかのエラーを収集します。これらのエラーは多くの場合、比較的基本的な情報です。エラーの場所とスタックは提供されますが、問題を特定するにはソース コードを確認する必要があります。
たとえば、オブジェクトが空であるというエラーが報告されますが、どのオブジェクトが空であるか、その理由、解決方法、および数値があるかどうかを知るにはどうすればよいですか。
さまざまなエラーを捕捉して、特定のシナリオに合わせていくつかのカスタム エラーをスローできれば、さらに良いでしょう。サードパーティのライブラリはこの点で良い仕事をしていますが、ビジネス コードの担当者でシナリオ ベースのカスタム エラーに注意を払う人はほとんどいません。
もちろん、フロントエンド ビジネス コードのユーザーはインターフェイスを通じてソフトウェアを使用しますが、実際には、さまざまなエラーに対していくつかの UI プロンプトを提供するだけで十分です。ライブラリコードは開発者向けであるため、さまざまなエラーをシナリオベースで記述し、エラーに番号を付けて解決策を提供する必要があります。
しかし、ビジネス コードもエラーをサードパーティ ライブラリ コードと同様に扱うべきだと思います。意味のないネイティブ エラーを報告する代わりに、トラブルシューティングと解決のために特定の意味を持つカスタム エラーをいくつか報告してください。問題ははるかに単純になります。
ただし、シナリオベースのカスタム エラーは問題のトラブルシューティングに役立ちますが、コードによって報告される可能性のあるエラーを確実に把握することに基づいている必要があります。報告するエラー メッセージが実際のエラー原因と異なる場合、トラブルシューティングが困難になるため、元のエラーを報告することをお勧めします。
プログラムの実行プロセスは制御フローです。制御文の影響を受けて、実行中にデータが変更されます。データの変更はデータ フローと呼ばれます。制御フローとデータ フローは、プログラム分析でよく分析される 2 つの側面です。
エラーは制御フローを中断します。try catch を通じてエラーに対して何らかの処理を行う必要があります。
エラー処理には 2 つの目的があります。
1 つはバックアップ処理を実行することであり、これは if else と同等であり、エラーを再度報告する必要はありません。
1 つは、シナリオでネイティブ JS エラーを記述し、より具体的な情報を含むエラー オブジェクトを作成して、それをスローする方法です。
多くのライブラリはこれを非常にうまく行っており、エラー番号と解決策も示しています。しかし実際には、多くのビジネス コードは UI 上でユーザーにフィードバックを提供するだけで、スローされたエラーに対するシナリオベースのパッケージ化を提供しません。その結果、エラー監視プラットフォームによって収集されるエラーは比較的原始的なエラーとなり、トラブルシューティングのためにソース コードを表示する必要があります。ライブラリ コードのようなシナリオ ベースのエラー パッケージ化も行うことができれば、ほとんどの Javascript エンジニアが行っていない問題のカウントとトラブルシューティングがはるかに簡単になります。
プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !
以上がJS の try catch ステートメントとその 2 つの関数を詳細に分析します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。