JavaScript の基礎: エラーキャプチャメカニズム

JavaScript の基礎: エラーキャプチャメカニズム

序文

Javascript エンジンはシングルスレッドなので、例外が発生すると、Javascript エンジンは通常、実行を停止し、後続のコードをブロックして例外メッセージをスローします。したがって、予測可能な例外については、それらをキャプチャして、ユーザーまたは開発者に正しく表示する必要があります。

エラーオブジェクト

実行時エラーが発生すると、Error のインスタンスがスローされます。

エラー オブジェクトには 2 つのプロパティがあります。

  • err.name: エラー名/エラータイプ
  • err.message: エラーメッセージ

エラーの作成

新しいエラー([メッセージ[,ファイル名[,行番号]]])

エラー タイプ js では、次の 7 つのエラー タイプが定義されています。

  1. エラー
  2. 評価エラー
  3. 範囲エラー
  4. 参照エラー
  5. 構文エラー
  6. タイプエラー
  7. URIエラー

投げる

JavaScript コードの中には、構文エラーがないのに論理エラーがあるものもあります。このようなエラーの場合、JavaScript は例外をスローしません。このとき、エラー オブジェクトのインスタンスを自分で定義し、throw ステートメントを使用して積極的に例外をスローすることができます。プログラムでは、throw ステートメントを使用して意図的に例外をスローすることができます。その構文は次のとおりです。

新しいエラーをスローします("errorstatements")

試して…捕まえて…最後に

  • 例外が発生する可能性のあるコードを試す
  • catch(error) エラーが発生したときに実行されるコード
  • 最後に何があっても実行されるコード

try ステートメントには 3 つの形式があります。

  • 試して...キャッチ
  • 試してみる...ついに
  • 試して...キャッチして...最後に

最終ルール

finally ブロックで例外がスローされると、try ブロック内の例外が上書きされます。

試す {
    試す {
        新しいエラーをスローします('it1が見つかりません');
    ついに
        新しいエラーをスローします('見つかりません2');
    }
} キャッチ (エラー) {
    console.log(エラーメッセージ);
}

// 見つかりません2

finally ブロックから値を返すと、try と catch に return ステートメントがあるかどうかに関係なく、その値は try-catch-finally 全体の戻り値になります。これには、catch ブロックでスローされた例外が含まれます。

関数テスト() {
    試す {
        新しいエラーをスローします('it1が見つかりません');
        1 を返します。
    } キャッチ (エラー) {
        新しいエラーをスローします('見つかりません2');
        2を返します。
    ついに
        3 を返します。
    }
}

コンソール.log(テスト()); // 3

トライ/キャッチパフォーマンス

よく知られている反最適化パターンはtry/catchを使うことである。

V8 (およびおそらく他の JS エンジン) では、try/catch ステートメントを使用する関数は V8 コンパイラによって最適化できません。

ウィンドウ.onerror

window.onerrorにイベントリスナー関数を定義すると、プログラム内の他のコードによって生成されたキャッチされていない例外が、window.onerrorに登録されたリスナー関数によってキャッチされることが多くなります。

window.onerror = 関数 (メッセージ、ソース、行番号、列番号、エラー) { }

  • メッセージ: 例外情報 (文字列)
  • ソース: 例外が発生したスクリプトの URL (文字列)
  • lineno: 例外が発生した行番号(数字)
  • colno: 例外が発生した列番号 (数値)
  • error : エラーオブジェクト(オブジェクト)

約束の例外

Promise で例外がスローされました

  • 新しい Promise((resolve,reject)=>{reject(); })
  • Promise.resolve().then((resolve,reject)=>{reject(); });
  • Promise.reject();
  • スロー式;

Promise で例外をキャッチする

  • promiseObj.then(未定義、(err)=>{ catch_statements });
  • promiseObj.catch((例外)=>{ catch_statements })

知らせ

JavaScript 関数では、関数の実行を中断できるのは return / yield / throw のみであり、reject はそれ以上の実行を阻止しません。

例:

返品せずに拒否する

Promise.resolve()
.then(() => {
    console.log('実行前に拒否');
    拒否(新しいエラー('エラーをスロー'));
    console.log('実行後拒否');
})
.catch((エラー) => {
    console.log(エラーメッセージ);
});

// 実行拒否の前に
// エラーをスローする
// 実行後拒否

リターンを使用して拒否する

Promise.resolve()
.then(() => {
    console.log('実行前に拒否');
    拒否を返します(新しい Error('throw error'));
    console.log('after execute deny'); //*** 違いはここにあります。return が返された場合、ここでは実行されません})
.catch((エラー) => {
    console.log(エラーメッセージ);
});

// 実行拒否の前に
// エラーをスローする

Vue 例外キャプチャ

Vue.config.errorHandler = (err, vm, info) => {
  console.error("vue errorHandler によってエラーがキャプチャされました");
  コンソールエラー(err);
  コンソールエラー(vm);
  コンソールエラー(情報);
};

要約する

これで、JavaScript の基本に関するエラーキャッチメカニズムに関するこの記事は終了です。より関連性の高い js エラーキャッチメカニズムのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • window.onerror を使用して Js エラーをキャプチャして報告する方法
  • JS 非同期エラーキャプチャに関するいくつかのことの要約
  • JavaScript における try catch 例外捕捉メカニズムの使用法の分析
  • JS は onerror を使用して例外をキャプチャする例
  • JavaScript でのイベントと例外キャプチャの詳細な分析

<<:  Mybatis での動的 SQL ステートメント分析

>>:  Linux ソフトウェアのインストール場所を確認する簡単な方法

推薦する

一定時間後にNavicatがデータベースから自動的に切断される問題の解決方法

これは、データベース サーバーが、接続が多すぎるのを避けるために、一定時間非アクティブな状態が続くと...

HTMLのフォントがline-heightを指定しても垂直方向に中央揃えできない問題の解決方法を詳しく説明します

による写真に示されている効果を例に挙げてみましょう。明らかに、「次へ」というテキストを水平方向だけで...

JavaScript で H5 ゴールド コイン関数を実装する (サンプル コード)

今日は春節の金貨の赤い封筒のアクティビティを作りました。なかなか良い出来だと思います。皆さんと共有し...

デザイン理論: なぜ私たちは間違った場所を見ているのでしょうか?

数日前、バスで仕事に行きました。バスのカードリーダーの実際の使用シーンを実際に見て、カードリーダーの...

Node.JS で悪天候のリアルタイム警報システムを構築する

目次序文:ステップ1: 無料の天気予報インターフェースを見つけるステップ2: 天気予報インターフェー...

Tomcat を使用して IntelliJ IDEA によってデプロイされたプロジェクトの場所はどこですか?

IntelliJ IDEA が Tomcat を使用して Javaweb プロジェクトをデプロイし...

MySQLインデックスの作成について知っておくべきこと

目次序文: 1. インデックスメソッドを作成する2. インデックスを作成するために必要な権限序文: ...

MySQLのよくある間違い

NULL 値によると、MySQL の NULL 値は単にデータがないことを意味します。NULL 値は...

HTML の値属性と名前属性の機能と使用法の紹介

1. ボタンで使用される値は、「OK」、「削除」など、ボタンに表示されるテキストを指します。 2. ...

PostgreSQL正規表現の一般的な機能の概要

PostgreSQL正規表現の一般的な機能の概要正規表現は、複雑なデータ処理を必要とするプログラムに...

MySQLの日次統計レポートでは、その日にデータがない場合には0が入力されます。

1. 問題の再現:各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によっ...

Vue.jsクラウドストレージで画像アップロード機能を実現

序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...

Mysql5.7 のグループ連結関数を使用するときにデータが切り捨てられる問題に対する完璧な解決策

一昨日、本番環境でGROUP_CONCAT関数を使用して選択したデータが切り捨てられ、最大長が102...

MySQL の undo、redo、binlog の違いを簡単に分析します

目次序文【ログ取り消し】 【REDOログ】 【バイナリログ】要約する序文MySQL には、REDO ...

ルート変更を監視するJavaScriptの詳細な説明

目次歴史pushState() メソッドpushState() の使用シナリオreplaceStat...