コアポイント
エラーオブジェクト
例外が発生すると、エラーを表すオブジェクトが作成され、スローされます。 JavaScript言語は、7つのタイプの組み込みエラーオブジェクトを定義します。これらのエラータイプは、例外処理の基礎です。各エラータイプについては、以下で詳しく説明します。エラー
「エラー」タイプは、一般的な例外を示すために使用されます。この例外タイプは、ユーザー定義の例外を実装するために最も一般的に使用されます。ユーザー定義の例外を作成するトピックは、この記事の後半で再検討されます。 「エラー」オブジェクトは、次の例に示すように、コンストラクターを呼び出すことでインスタンス化されます。「エラー」オブジェクトには、「名前」と「メッセージ」という2つのプロパティが含まれています。 「名前」プロパティは、例外タイプ(この場合は「エラー」)を指定します。 「メッセージ」プロパティは、例外のより詳細な説明を提供します。 「Message」は、例外コンストラクターに渡された文字列からその値を取得します。残りの例外タイプは、より特定のエラータイプを表しますが、一般的な「エラー」タイプと同じ方法で使用されます。
数値が指定された範囲を超えた場合、「rangeerror」例外が生成されます。たとえば、JavaScriptの数値にはtofixed()メソッドがあり、「数字」パラメーターを使用して小数点以降に表示される数字の数を表します。このパラメーターは0〜20である必要があります(ただし、一部のブラウザはより広い範囲をサポートしています)。 「数字」の値がこの範囲の外側にある場合、「radeerror」がスローされます。次の例はこれを示しています。
var error = new Error("error message");
存在しない変数にアクセスすると、「参照エラー」例外がスローされます。これらの例外は、通常、既存の変数名がある場合に発生します。次の例では、「Bar」にアクセスするときに「参照エラー」が発生します。この例では、操作を増加させようとすると、「バー」がアクティブな範囲に存在しないことを前提としていることに注意してください。
var pi = 3.14159; pi.toFixed(100000); // RangeError
JavaScript言語ルールに違反すると、「Syntaxerror」がスローされます。 CやJavaなどの言語に精通している開発者は、コンピレーション中に構文エラーに遭遇するために使用されます。ただし、JavaScriptは解釈された言語であるため、コードが実行されるまで構文エラーは認識されません。構文エラーは、回復できない唯一の例外タイプであるため、一意です。 「if」ステートメントには右ブレースがないため、次の例では構文エラーが生成されます。
function foo() { bar++; // ReferenceError }
値が予想されるタイプではない場合、「TypeRror」例外が発生します。存在しないオブジェクトメソッドを呼び出そうとすることは、そのような例外の一般的な原因です。次の例では、「foo」という名前の空のオブジェクトを作成し、そのbar()メソッドを呼び出そうとします。 bar()は定義されていないため、「TypeRror」が呼び出されようとするとスローされます。
if (foo) { // SyntaxError // 缺少右花括号 }
var foo = {}; foo.bar(); // TypeError
例外処理
例外が何であるかがわかったので、プログラムがクラッシュするのを防ぐ方法を学ぶ必要があります。 JavaScriptは、「try…catch…finally」ステートメントを介して例外を処理します。一般的な例のステートメントを以下に示します。
decodeURIComponent("%"); // URIError
「キャッチ」条項
「try…catch…actinal」の2番目の部分は「キャッチ」条項です。 「キャッチ」句は、「Try」句で例外が発生した場合にのみ実行されるコードのブロックです。 「キャッチ」条項はオプションですが、それなしでは例外を実際に処理することは不可能です。これは、「キャッチ」条項が例外がコールスタックで伝播するのを防ぎ、プログラムの回復を可能にするためです。 「try」ブロックで例外が発生した場合、コントロールはすぐに「キャッチ」句に渡されます。発生する例外は、処理のために「キャッチ」ブロックにも渡されます。次の例は、「catch」句を使用して「参照エラー」を処理する方法を示しています。 「リファレンスエラー」オブジェクトは、「例外」変数を介して「キャッチ」句で使用できることに注意してください。
var error = new Error("error message");
複雑なアプリケーションは、さまざまな例外を生成できます。この場合、「インスタンスオブ」演算子を使用して、さまざまなタイプの例外を区別できます。次の例では、「try」句がいくつかのタイプの例外を生成できると想定されています。対応する「CACT」句は、「TypeError」と「参照エラー」の例外を他のすべてのタイプのエラーとは別に処理するために「インスタンス」を使用します。
var pi = 3.14159; pi.toFixed(100000); // RangeError
"最後に"節
「try…catch…catch…acting」ステートメントの最後のコンポーネントは、最終的に「「最終的に」句です。 「最終的な」句は、エラーが発生するかどうかに関係なく、「試行」と「キャッチ」条項の後に実行されるコードのブロックです。 「最終的に」句は、とにかく実行する必要があるクリーニングコード(ファイルを閉じるなど)を含めるのに役立ちます。 「最終的に」句が実行されていない場合でも、実行されることに注意してください。この場合、「最終的な」句が実行され、スローされた例外は正常に継続されます。
「最終的な」条項に関する興味深い注意は、「try」または「catch」句が「返品」ステートメントを実行したとしても、実行されるということです。たとえば、「最終的な」句が最後に実行されたコンテンツであるため、次の関数はfalseを返します。
function foo() { bar++; // ReferenceError }
例外
JavaScriptを使用すると、プログラマーは「Throw」という名前のステートメントを通じて独自の例外をスローできます。この概念は、経験の浅い開発者にとって少し混乱する可能性があります。結局のところ、開発者はエラーなしでコードを書くのに苦労していますが、「スロー」ステートメントは意図的にエラーを導入します。ただし、意図的に例外を投げると、実際にコードのデバッグとメンテナンスが容易になる可能性があります。たとえば、意味のあるエラーメッセージを作成することにより、問題を識別して解決する方が簡単です。
以下は、「スロー」ステートメントのいくつかの例を示しています。例外としてスローできるデータ型に制限はありません。また、同じデータをキャプチャしてスローできる回数に制限はありません。言い換えれば、例外をスローし、捕まえてから再びスローすることができます。
if (foo) { // SyntaxError // 缺少右花括号 }
「スロー」ステートメントは任意のデータ型で使用できますが、組み込みの例外タイプを使用するにはいくつかの利点があります。たとえば、Firefoxは、例外が発生するファイル名や行番号などのデバッグ情報を追加することにより、これらのオブジェクトを専門としています。
たとえば、分割操作がアプリケーションのどこかで発生したとします。ゼロによる分裂が発生する状況があるかもしれないので、分割は面倒です。 JavaScriptでは、このような操作は「Nan」になります。これにより、デバッグが困難な紛らわしい結果につながる可能性があります。アプリがゼロで割ることについて大声で不平を言うと、状況ははるかに簡単になります。次の「IF」ステートメントは、例外をスローすることによりこれを行います。
var error = new Error("error message");
もちろん、以下に示すように、「rasinError」を使用する方が適切かもしれません。
var pi = 3.14159; pi.toFixed(100000); // RangeError
カスタム例外オブジェクト
組み込みの例外タイプを使用してカスタムエラーメッセージを生成する方法を学びました。ただし、もう1つの方法は、既存の「エラー」タイプを拡張することにより、新しい例外タイプを作成することです。新しいタイプは「エラー」から継承されるため、他の組み込みの例外タイプと同様に使用できます。この記事では、JavaScriptの継承のトピックについては説明していませんが、ここに簡単な手法が紹介されています。次の例は、ゼロでディビジョンを処理する問題に戻ります。以前と同様に「エラー」または「rasinError」オブジェクトを使用する代わりに、独自の例外タイプを作成したいと考えています。この例では、「DivisionByzeroError」例外タイプを作成しています。この例の関数は、新しいタイプのコンストラクターとして機能します。コンストラクターは、「名前」と「メッセージ」属性を割り当てる責任があります。この例の最後の2行では、新しいタイプが「エラー」オブジェクトから継承できるようになります。
function foo() { bar++; // ReferenceError }
覚えておくべきこと< 「試してみてください…キャッチ…最後に」ステートメントは、例外を処理するために使用されます。
解析エラーとも呼ばれる
構文エラーは、従来のプログラミング言語でコンパイル時に発生し、JavaScriptの解釈時間に発生します。構文エラーは、コードが構文的に正しくなく、解析できない場合に発生します。たとえば、クロージングブラケットを忘れたり、違法文字を使用したりすると、構文エラーが発生します。一方、コンピレーションが成功した後、プログラムの実行中にランタイムエラーが発生します。これらのエラーは通常、コードによって実行される違法な操作によって引き起こされます。たとえば、未定義の変数にアクセスしようとするか、存在しない関数を呼び出すと、ランタイムエラーが発生する可能性があります。
JavaScriptは、例外を処理するためのキャッチステートメントを提供します。 Tryブロックには例外をスローする可能性のあるコードが含まれていますが、CatchブロックにはTryブロックに例外がスローされた場合に実行されるコードが含まれます。簡単な例を次に示します:
var error = new Error("error message");
JavaScriptの「最終」ブロックは、結果に関係なく、試行ブロックの後にコードを実行するために使用されます。これは、例外がスローされているかどうかに関係なく、「最終的に」ブロックのコードが実行されることを意味します。通常、ファイルの閉鎖やクリアリソースなど、コードの実行後にクリーンアップするために使用されます。
はい、JavaScriptを使用すると、「スロー」ステートメントを使用して独自の例外をスローできます。文字列、数字、ブール値、オブジェクトなど、あらゆるタイプの例外をスローできます。例外がスローされると、プログラムの通常のプロセスが停止され、制御が最新の例外ハンドラーに渡されます。
JavaScriptを使用すると、組み込みのエラーオブジェクトを拡張してカスタムエラータイプを作成できます。これは、コードに特定のタイプのエラーをスローする場合に役立ちます。例は次のとおりです。
var pi = 3.14159; pi.toFixed(100000); // RangeError
エラー伝播とは、コールスタックの最も近い例外ハンドラーにスローされた場所からエラーを渡すプロセスを指します。エラーをスローする関数にエラーが発生しない場合、呼び出し関数に上向きに伝播されます。その時点で、プログラムが終了するグローバルスコープにキャプチャまたは到達するまで伝播します。
javaScriptは、ログにconsole.error()メソッドを提供します。このメソッドはConsole.log()と同じように機能しますが、ログにスタックトレースも含まれており、メッセージをコンソールのエラーとして強調表示します。例は次のとおりです。
function foo() { bar++; // ReferenceError }
JavaScriptの非同期エラーを処理する方法は?
JavaScriptのTypeRrorとは何ですか?
if (foo) { // SyntaxError // 缺少右花括号 }
以上がJavaScriptでの例外的な例外処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。