catchの概要
| エラーハンドリング JavaScript予約語 | ||
|
catch 概要 わかりやすく説明 |
||
|
catchの基本的な使い方
以下は、try...catchを使った基本的な例です。
// 基本的なtry...catchの使用例
try {
const result = 10 / 0; // エラーは発生しない(Infinityを返す)
console.log(result);
const undefinedVariable = undefinedValue; // 未定義の変数を参照しエラー発生
} catch (error) {
console.error("エラーが発生しました:", error.message);
}
tryブロックで発生したエラーはcatchブロックでキャッチされます。errorオブジェクトにはエラーの詳細情報(例: メッセージ)が格納されます。
エラーに応じた処理
catch内でエラータイプに応じた処理を実装することができます。
// エラータイプによる処理分岐
try {
JSON.parse("invalid JSON"); // 無効なJSON文字列をパースしようとする
} catch (error) {
if (error instanceof SyntaxError) {
console.error("JSON構文エラー:", error.message);
} else {
console.error("予期しないエラー:", error.message);
}
}
error instanceof ErrorTypeを使用してエラータイプを判別できます。- エラーに応じた異なる処理を実装可能です。
非同期コードでのエラーハンドリング
非同期関数やPromiseでもcatchを利用してエラーを処理できます。
// 非同期関数でのエラーハンドリング
async function fetchData() {
try {
const response = await fetch("https://invalid.url"); // 無効なURLでエラー発生
const data = await response.json();
console.log(data);
} catch (error) {
console.error("データ取得エラー:", error.message);
}
}
fetchData();
// Promiseでのエラーハンドリング
fetch("https://invalid.url")
.then(response => response.json())
.catch(error => {
console.error("Promiseエラー:", error.message);
});
async/await構文ではtry...catchでエラーを処理します。Promiseでは.catchメソッドでエラーをキャッチします。
注意点
- エラーの発生箇所:
tryブロック内のコードのみがcatchでキャッチされます。try外のエラーは処理されません。 - グローバルエラーのキャッチ:
window.onerrorやprocess.on('uncaughtException')でキャッチ可能です(Node.jsの場合)。 - エラーの意図的なスロー:
throwキーワードを使用して意図的にエラーをスローできます。
よくある質問
- Q:
catchでエラーをキャッチしないケースはありますか? - A:
catchは、tryブロック内で発生した同期的なエラーのみをキャッチします。非同期エラーやtry外で発生したエラーは対象外です。 - Q: エラーを再スローするにはどうすればいいですか?
- A:
catchブロック内でthrowを使用すると、キャッチしたエラーを再スローできます。 - Q: 非同期関数でエラーが発生した場合の推奨されるハンドリング方法は?
- A:
try...catch構文を使用するか、.catchメソッドでPromiseチェーン内でエラーを処理してください。
まとめ
catchは、JavaScriptで例外処理を行い、エラーに応じた適切なレスポンスやデバッグを可能にする重要な機能です。
- 例外処理により、プログラムを中断せずに続行できます。
- エラータイプを判別して適切な処理を実装可能です。
- 非同期コードでも
catchを活用して信頼性の高いコードを実現しましょう。