JavaScriptの例外処理の仕組みを解説!try...catch...finallyの基本と使い方
JavaScriptでは、try...catch...finally構文を使って例外(エラー)を処理します。比較的新しいバージョンのJavaScriptから例外処理の仕組みが導入され、try...catch...finallyブロックに加えてthrow演算子も実装されています。これらを組み合わせることで、プログラムの実行中に発生したエラーを適切に捕捉し、制御することが可能になります。
なお、プログラマが意図的に発生させた例外やランタイムエラーは捕捉できますが、JavaScriptの構文エラー(シンタックスエラー)は捕捉できない点に注意しましょう。構文エラーはコードの解析段階で検出されるためです。
try...catch...finallyの基本構文
try...catch...finallyブロックの基本的な構文は以下のとおりです。
<script>
<!--
try {
// 実行したいコード
[break;]
}
catch ( e ) {
// 例外が発生した場合に実行するコード
[break;]
}
[ finally {
// 例外の発生有無にかかわらず
// 必ず実行されるコード
}]
//-->
</script>
各ブロックの役割
- tryブロック: 実行したい通常の処理を記述します。ここで例外が発生すると、残りの処理を中断してcatchブロックへ移行します。
- catchブロック: tryブロック内で例外が発生した場合にのみ実行されます。発生した例外オブジェクトは引数(例:e)として受け取ることができ、エラー内容の確認やログ出力などに活用できます。
- finallyブロック: 例外が発生してもしなくても必ず実行されるブロックです(省略可能)。ファイルやネットワークリソースの解放など、後処理を確実に行いたい場合に便利です。
サンプルコード
次のコードを実行すると、JavaScriptで例外がどのように処理されるかを実際に確認できます。未定義の変数aを参照することで、意図的にエラーを発生させています。
<html>
<head>
<script>
<!--
function myFunc()
{
var x = 20;
try {
alert("変数aの値は : " + a );
}
catch ( e ) {
alert("エラー: " + e.message );
}
}
//-->
</script>
</head>
<body>
<p>下のボタンをクリックして結果を確認してください:</p>
<form>
<input type = "button" value = "クリック" onclick = "myFunc();" />
</form>
</body>
</html>
この例では、変数aは宣言されていないため、tryブロック内で参照エラー(ReferenceError)が発生し、catchブロックに処理が移ります。その結果、エラーメッセージを表示するアラートが表示されます。
補足: 古いブラウザでは例外オブジェクトのe.descriptionプロパティが使われることがありましたが、現在の主要ブラウザではe.messageを使用するのが一般的です。また、より詳細なデバッグを行いたい場合はe.name(エラーの種類)やe.stack(スタックトレース)も活用するとよいでしょう。
-
JavaScriptの'z'['toUpperCase']()はどのように、そしてなぜ機能するのか?
JavaScriptのz[toUpperCase]()はどのように機能するのか JavaScriptのtoUpperCase()メソッドは、文字列を大文字に変換するためのメソッドです。通常はドット記法を使って次のように書きます。 z.toUpperCase(); // Z を返す しかし、実はブラケット記法(角括弧記法)を使っても同じ結果が得られます。 z[toUpperCase]; // メソッドそのものを参照 さらに、末尾に () を付けて呼び出せば、実際に大文字への変換が実行されます。 z[toUpperCase](); // Z を返す これは、次のコードと同じ意味になります。 ale
-
JavaScriptで構造体(Struct)を操作する方法をわかりやすく解説
JavaScriptで構造体(Struct)を扱うには? JavaScriptには、C言語のような組み込みの構造体(Struct)型は用意されていません。しかし、関数とオブジェクトを組み合わせることで、構造体と同じような働きを簡単に実現できます。 以下のサンプルコードを実行して、その方法を確認してみましょう。 サンプルコード <!DOCTYPE html> <html> <body> <script> function displayStruct(str) { var str = s