1. 基本的な使い方とロジック使用 試す{ //コード.... }キャッチ(エラー){ //エラー処理 }ついに{ // try/catch で何が起こっても (エラーが発生しても発生しなくても)、finally ステートメント内のこのコードは実行される必要があります。 } 論理 2. 特徴try...catch は実行時エラーに対してのみ機能し、インタープリタエラーに対しては適切に機能しません。 試す{ {{{{{{{ }キャッチ(エラー){ コンソール.エラー(err) } // エンジンは「解析時」にミスを犯し、コードを理解できず、それをキャッチできなかった。 try...catch は同期的にのみ動作します 試す{ setTimeout(関数(){ 未定義変数; },1000) }キャッチ(エラー){ コンソール.エラー(err) } //setTimeoutのコールバック関数が実行されると、エンジンはtry...catch構造を離れます 最後に、tryブロック内のreturn文を無効にすることができます。 関数テスト(){ 試す { 1 を返します。 } キャッチ(エラー) { 2を返します。 ついに 3 を返します。 } } コンソールにログ出力します。 //3 3. エラーオブジェクトプログラムでエラーが発生すると、エラーの詳細を含むオブジェクトがjs内に生成され、そのオブジェクトがcatchにパラメータとして渡されます。 すべての組み込みエラーと同様に、エラーオブジェクトには2つの主要なプロパティがあります。
試す { lalala; // エラー、変数が定義されていません。 } キャッチ (エラー) { alert(err.name); // 参照エラー alert(err.message); // lalala は定義されていません alert(err.stack); // ReferenceError: lalala は (...call stack) で定義されていません // エラー全体を表示することもできます // エラーは「name: message」という文字列に変換されます alert(err); // ReferenceError: lalala は定義されていません } 理論的には、何でもエラー オブジェクトとしてスローできますが、組み込みのエラー オブジェクトとの互換性を保つために、名前とメッセージを持つオブジェクトをスローするのがベスト プラクティスです。 追加: 組み込みエラーオブジェクト
4. キャッチアンドスロー戦略の改善エラーをキャッチするのは、プログラムのクラッシュを防ぐためだけではなく、デバッグを容易にし、バグを見つけるためにも重要です。そのため、エラー処理戦略は、コーディング者の優雅さを少し反映することができます。 諺にあるように、コーダーは常にエレガントです。知っているエラーだけをキャッチするという原則に従うようにしてください。 梨を持ち上げて json = '{ "age": 30 }'; 試す{ user = JSON.parse(json); とします。 アラート(ユーザー名); } キャッチ (エラー) { console.error('JSON エラー:'+err); } 上記の例の catch 戦略は、プログラムの正常な動作を保証できます。これは、catch ブロックが内部のすべてのエラーをキャッチできるためです。JSON.parse のエラーでも、user.name が存在しないエラーでも、どちらもキャッチできます。ただし、両方のエラーを同じように印刷することは、デバッグには役立ちません。次のように記述する方がよいでしょう。 json = '{"age":30}' とします 試す{ user = JSON.parse(json); とします。 アラート(ユーザー名) }キャッチ(エラー){ if (err instanceof SyntaxError) { console.error('JSON エラー:'+err); } それ以外の場合はエラーをスローします。 } 各 catch ブロックは、発生する可能性があるとわかっているエラーを処理します。つまり、プログラミング時に、プログラマーは予想されるエラーをキャッチし、予想していなかったエラーを破棄します。 5. Promiseのエラー処理ご存知のとおり、Promise はエラーを吸収します。これは、Promise の実装がすべてのエラーを内部でキャプチャし、キャプチャされたエラーが外部 (Promise の外部) にスローされず、チェーンに沿って最も近い onreject コールバックを見つけることによって渡されるためです。そのため、Promise エラーを処理する方法は 2 つしかありません。
例えば 試す{ 新しいPromise((resolve,reject)=>{ 新しいエラーをスローします('promise error') }).catch(()=>{ // エラーは最新の onreject コールバックでキャッチされます console.error(err); }) }キャッチ(エラー){ // 実行されず、Promise はエラーを飲み込む コンソールエラー(err); } また、executor 関数または promise ハンドラーに関係なく、内部で発生するすべてのエラーは取り込まれ、暗黙的にキャッチされることと同等であることに注意してください。エラーは自動的に最も近い onreject コールバックを見つけて渡します。 試す{ 新しいPromise((resolve,reject)=>{ 解決する(); })。そして()=>{ 新しい Error をスローします ('promise then error')。 }).catch((エラー){ コンソールエラー(err); }) }キャッチ(エラー){ //console.error(err) は地球が破壊されるまで実行されません } 同様に、エラーが見つかりonrejectに渡される前は、onrejectコールバックが見つかり処理されるまで、それまでに登録されたonfulfilledコールバックはすべて無効です。onrejectコールバック後のonfulfilledコールバックは正常です。 試す { 新しい Promise((resolve, 拒否) => { 新しいエラーをスローします('promise error') }).then((ret) => { //エラーは処理されず、失敗します console.log('then1:' + ret) }).catch((エラー) => { //エラーが処理され、後続のシーケンスは通常どおりです console.error(err); '処理済み' を返す }).then((ret) => { //通常実行 console.log('then2' + ret); }) } キャッチ (エラー) { //同様に、人類が滅亡するまでconsole.error(err)は実行されません } // エラー: プロミスエラー //その後処理される チェーン全体にキャッチが設定されていない場合はどうなりますか? そして、このエラーは地球の中心を貫通してグローバル環境まで浸透し、異なるホスト環境に応じて異なるグローバルイベントをトリガーします。たとえば、ブラウザでは unhandledrejection イベントがトリガーされ、ノード環境でも unhandledRejection イベントがトリガーされます。通常、このイベントは監視され、その後、プログラマーまたはユーザーに情報が表示されます。 追加 1: Chromium / v8 / v8 / 3.29.45 の Promise 内部エラー キャプチャ 追加2: async/await エラーキャプチャ 6. パフォーマンスの低下V8 バージョン 6 (Node 8.3 および最新の Chrome に同梱) 以降では、try-catch 内のコードのパフォーマンスは通常のコードと同じです。 ------ 爆栈網 (少しテストしてみましたが、違いはあまりありませんでした) 以上がJavaScriptエラーキャプチャの詳しい説明です。JavaScriptエラーキャプチャの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。 以下もご興味があるかもしれません:
|
<<: Oracle と MySQL の高可用性ソリューションの比較分析
1. オンラインテキストジェネレーターBlindTextGenerator: デザイナーにとって、こ...
1つ目: テキスト/HTML経由var txt1="<h1>テキスト。<...
実際の使用では、ミニプログラムを友人や友人サークルと共有する必要があることが多く、通常は一度に 1 ...
目次1. マイクロタスクとは何ですか? 2. マクロタスクとは何ですか? 3. 事例3.1 結論4....
Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...
Shutdown.batファイルには次の文があります "%CATALINA_HOME%&q...
この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は...
コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...
Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...
CSS3 はアニメーションを作成でき、多くの Web ページのアニメーション画像、Flash アニメ...
簡単に言えば、ウェブサイト構築とは、「この人はどんな外見をしているのか」と「この人はどんな内面を持っ...
クリップパスの使用ポリゴン値は複数の座標点で構成されます。最初の値は x 方向、2 番目の値は y ...
目次序文 - Vue ルーティング1. 最も基本的なルーティング構成1. router/index....
<br />この記事では、XHTMLとXHTMLの基礎知識について簡単に紹介します。 X...
目次序文JSマジックナンバー数値の保存バイナリ変換方法なぜ 0.1 + 0.2 !== 0.3 なの...