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 ブロックが処理を行うため、プログラムの制御フローが変わります。エラーハンドリングは適切に行い、必要に応じて再スローすることでエラーの伝達が可能です。

関連項目

編集

参考

編集