JavaScriptプログラミングのエラーは、種類によって大きく以下の3種類に分けられます。
- 構文エラー: 解析エラーとも呼ばれ、通常、コードの文法エラーが原因で発生します。構文エラーが発生すると、コードは実行を停止します。
- 実行時エラー: 例外とも呼ばれ、未定義のメソッドの呼び出し、存在しないファイルの読み取りなど、プログラムの実行中に発生します。実行時エラーは実行中のコードも終了します。
- 論理エラー: これは、見つけるのが最も難しいタイプのエラーです. 論理エラーは通常、プログラムが予期しない結果を出力したり、操作を終了させたりするコードの欠陥によって引き起こされます.
エラーと例外の違い
コードが実行される前にエラーが発生します. JavaScript プログラムを実行する前に, JavaScript インタプリタは最初にコードをチェックします. 文法上のエラーなどコードが間違っている場合, ブラウザは対応するエラーを報告します. コードのみが実行されるまで実行されません.エラーが修正されます。
未定義のメソッドの呼び出し、存在しないファイルの読み取りなど、コードの実行中に例外 (Exception) が発生します。例外が発生する前はコードの実行に影響はなく、例外が発生するとブラウザのコンソールにエラーメッセージが出力され、プログラムが終了します。
JS 例外処理
例外処理の目的は、例外が原因でプログラム全体が終了しないように、例外を生成するコードをキャッチすることです。 JavaScript では、try catch ステートメントを使用して例外をキャッチし、それに応じて処理できます。構文は次のとおりです。
try {
// 例外をスローする可能性のあるコード
} catch(error) {
// 例外発生時のアクション
}
例外を引き起こす可能性のある任意のコードを try ステートメント ブロックに配置し、例外を処理する方法を catch ステートメント ブロックで定義できます。 try ステートメント ブロック内のコードでエラーが発生した場合、コードは try ステートメント ブロックから catch ステートメント ブロックにすぐにジャンプします.try ステートメント ブロック内のコードでエラーが発生していない場合、catch ステートメント ブロック内のコードは、無視されます。
JS サンプル コードは次のとおりです。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<script>
try {
var title = "JavaScript";
document.write(title);
// 未定義の変数を呼び出す
document.write(str);
// エラーが発生した場合、以下の行は実行されない
alert("すべてのステートメントが正常に実行されました。");
} catch(error) {
// エラーを処理する
alert("エラーメッセージ: " + error.message);
}
// 次のコードを続けて実行する
document.write("<p>Hello World!</p>");
</script>
</body>
</html>
実行結果は次の図のとおりです。

try ステートメント ブロック内のコードで例外が発生すると、エラー オブジェクト (上記のコードのcatch(error)
など) が作成され、スローされます. オブジェクトには、次のように 2 つの属性が含まれます。
- 名前: タイプが間違っています。
- メッセージ: エラーの説明。
JS try catch 最終ステートメント
try catch ステートメントの後に、finally ステートメント ブロックを追加することもできます。try ステートメント ブロック内のコードにエラーがあるかどうかに関係なく、finally ステートメント内のコードが実行されます。サンプルコードは次のとおりです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<script>
// ユーザーの入力パラメータを受け取る
var num = prompt("0から100までの数字を入力してください。");
// 現在の時間を取得します。
var start = Date.now();
try {
if(num > 0 && num <= 100) {
console.log(Math.pow(num, num)); // 基数の指数
} else {
console.log("入力された値が無効です。");
}
} catch(e) {
console.log(e.message);
} finally {
// コードの実行にかかった時間を表示します。
console.log("コードの実行にかかった時間は" + (Date.now() - start) + "ミリ秒です。");
}
</script>
</body>
</html>
88 などの 100 未満の数値を入力すると、実行結果は次のようになります。
1.3015928349429721e+171
コードの実行にかかった時間: 0ms
123 など、100 より大きい数値を入力すると、実行結果は次のようになります。
入力された値は無効です!
コードの実行にかかった時間: 0ms
JS がエラーをスローする
JavaScript では、JavaScript パーサーを使用してエラーを自動的にスローするだけでなく、エラーを手動でスローすることもできます。エラーをスローするには、throw ステートメントを使用する必要があります。構文は次のとおりです。
式をスローします。
ここで、expression はスローされる例外であり、オブジェクト、文字列、配列など、任意の型の値にすることができます。オブジェクト型を使用することをお勧めします。
JavaScript には、スローされるエラー オブジェクトを作成する組み込みの Error() 関数があります。サンプル コードは次のとおりです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<script>
function squareRoot(number) {
// 数字が負の場合はエラーを投げる
if(number < 0) {
throw new Error("申し訳ありませんが、負数の平方根は計算できません!");
} else {
console.log(Math.sqrt(number));
}
}
try {
squareRoot(16);
squareRoot(625);
squareRoot(-9);
squareRoot(100);
// エラーが投げられた場合、以下の行は実行されない
console.log("すべての関数が正常に実行されました。");
} catch(e) {
// エラーを処理する
console.log(e.message);
}
</script>
</body>
</html>
操作の結果は次のとおりです。
4
25
申し訳ありませんが、負の数の平方根は計算できません!

前に、try ステートメント ブロックのコードでエラーが発生すると、Error オブジェクトが作成されてスローされることを説明しました。このオブジェクトには、エラーの種類とエラーの説明という 2 つの属性が含まれます。
When different errors occur, different error types will be returned. JavaScript は、次のエラーの種類をサポートしています。
エラータイプ | 例証する |
---|---|
EvalError | eval() 関数の使用時にエラーが発生すると、このエラーがスローされます |
InternalError | JavaScript エンジンの内部エラーが原因で発生した例外。このエラーがスローされます |
RangeError | 許容範囲外の値が使用された場合にスローされる RangeError |
SyntaxError | コードに構文エラーがある場合にスローされる構文エラー |
TypeError | TypeError は、数値に対して文字列メソッドを呼び出したり、文字列に対して配列メソッドを呼び出したりするなど、予期される型ではない値が使用されたときにスローされます。 |
URIError | URI エラー。URI 関連の関数を使用して URI パラメータを渡すと、このエラーがスローされます |
ReferenceError | パラメータ エラー。未定義の変数、関数、オブジェクトを使用しようとすると、このエラーがスローされます |