JavaScript/throw
throw
編集throw は、JavaScript のキーワードで、例外を投げてエラーを処理するために使用されます。エラーや異常な状況を発生させ、そのエラーをキャッチして適切に処理するために使います。try...catch
構文と組み合わせて使用されます。
構文
編集throw 式;
throw
文は、式の評価結果を例外としてスローします。スローされた例外は、catch
ブロックでキャッチされることを期待して処理されます。
使用例
編集基本的な使用法
編集function checkAge(age) { if (age < 18) { throw 'Age must be 18 or older'; } return 'Access granted'; } try { console.log(checkAge(15)); } catch (e) { console.log('Error: ' + e); } // 出力: // Error: Age must be 18 or older
この例では、checkAge 関数が年齢が 18 未満の場合にエラーを投げます。throw
を使ってエラーメッセージをスローし、それを catch
ブロックでキャッチして表示します。
例外オブジェクトを投げる
編集function checkAge(age) { if (age < 18) { throw new Error('Age must be 18 or older'); } return 'Access granted'; } try { console.log(checkAge(15)); } catch (e) { console.log('Error: ' + e.message); } // 出力: // Error: Age must be 18 or older
throw
を使って Error
オブジェクトをスローすることができます。これにより、エラーメッセージやスタックトレースを含む詳細な情報を提供できます。catch
ブロックでは、e.message を使ってエラーメッセージにアクセスできます。
数値やオブジェクトをスローする
編集function processData(data) { if (!data) { throw 404; // 数値を投げる } if (typeof data !== 'string') { throw { error: 'Invalid data type' }; // オブジェクトを投げる } return 'Processing ' + data; } try { console.log(processData(null)); } catch (e) { if (typeof e === 'number') { console.log('Error code: ' + e); } else if (e.error) { console.log('Error: ' + e.error); } } // 出力: // Error code: 404
throw
文では、数値やオブジェクトなど、任意の値をスローできます。catch
ブロックでは、その型に応じてエラーメッセージを処理することができます。
例外を再スローする
編集function processData(data) { try { if (!data) { throw new Error('Data is required'); } return 'Processing ' + data; } catch (e) { console.log('Caught an error: ' + e.message); throw e; // 例外を再スロー } } try { console.log(processData(null)); } catch (e) { console.log('Final error handling: ' + e.message); } // 出力: // Caught an error: Data is required // Final error handling: Data is required
throw
文は、捕まえた例外を再スローするのにも使えます。これにより、例外を上位の呼び出し元に伝達し、異なるレベルで処理を行うことができます。
注意点
編集throw
文でスローされた例外は、try
ブロック内でキャッチされることを期待して処理されます。catch
ブロックで捕まえられなかった場合、例外はプログラムの実行を停止させる可能性があります。throw
に渡すことができるのは、通常はオブジェクトやエラーメッセージの文字列ですが、任意の値をスローすることができます。ただし、Error
オブジェクトを使うことが一般的です。- 例外をスローすると、
catch
ブロックが処理を行うため、プログラムの制御フローが変わります。エラーハンドリングは適切に行い、必要に応じて再スローすることでエラーの伝達が可能です。