コードの一部は、何かがうまくいかないとき、「死んだ」となります(実行を停止)し、コンソールで例外を出力します。
try..catch、それが停止するようにコードの実行をしていない間に例外をキャッチしますが、いくつかのより合理的な操作で行うことができ、例外処理を提供します。
基本的な構造
try {
... 尝试执行的代码 ...
} catch(e) {
// 如果发生异常,跳到这里
... 异常处理 ...
} finally {
... 最终会执行的代码 ...
}
試します
try..catchのみ実行時エラーのために働きます
try-catchを例外をキャッチ(パース時)コード、ランタイムがキャプチャすることができます(ランタイム)例外をスローを読んで表示されません。
try..catch同期動作します
try-catch同期実行
、非同期操作の試みを言葉は、キャッチキャプチャされません。非同期操作を、のtry-catchキャプチャ異常。
try {
setTimeout(function() {
noSuchVariable; // 代码在这里停止执行
}, 1000);
} catch (e) {
alert( "won't work" );
}
setTimeout(function() {
try {
noSuchVariable; // try..catch 处理异常!
} catch (e) {
alert( "error is caught here!" );
}
}, 1000);
エラー
- 具体的な情報が含まれている例外ソースオブジェクトを投げます
- 名前:コンストラクタ名、例外名
- メッセージ:コンストラクタのパラメータ、異常内容のテキスト記述
スタック(非標準):現在のコールスタック、トリガー文字列、ネストされた例外コール配列を含みます。
- カスタムスロー
- 新しいエラー(メッセージを)投げます。
- 例外が再び投げられます
- キャッチのみ知られている例外キャッチし、例外の再スロー不明(教訓)
function readData() {
let json = '{ "age": 30 }';
try {
// ...
blabla(); // 预料之外的异常
} catch (e) {
if (e.name == "SyntaxError") { // 已知,具体异常
alert( "JSON Error: " + e.message );
} else {
throw e; // rethrow (*)重新抛出(不知道如何处理它)
}
}
}
// 最外层捕获,将异常抛到js运行时环境
try {
readData();
} catch (e) {
alert( "External catch got: " + e ); // 捕获到!
}
最終的には(最終的に実行されます)
変数は、try..catch..finally内部ローカルです
聞かせて、理解されるように、tryおよびcatch定義された変数がキャッチし、そして最終的にアクセスすることができない、唯一のブロックレベルのアクセススコープで定義された変数のconst。
最後に、リターン
(例外をスロー、リターンを含む)の実行の終わりにはどのような方法でのtry..catch、最終的に実行されます
環境固有(グローバル例外)
- nodejs
- process.on( 'uncaughtException')
- ブラウザ
- window.onerror =関数(メッセージ、URL、行、列、エラー){}
- メッセージ:例外情報。
- URL:URLコード異常発生。
- 行、列:エラーコードの行番号と列番号。
- エラー:例外オブジェクト。
- window.onerror =関数(メッセージ、URL、行、列、エラー){}
- アプリケーション
- 登録異常な記録サービス、サーバーに同期された例外情報、ログ解析、問題を特定し、解決します。
[ソースと拡張]
https://mp.weixin.qq.com/s/jHSk4UeNmQ1ih_F5vs0jdw