メインコンテンツにスキップ
モジュール 5 · レッスン 4 / 4コース内の 20/32~12 min
モジュールのレッスン (4/4)

試してみる/捕まえる/投げる

JavaScript の エラー は、通常のフローを中断する値 (通常は Error オブジェクト) です。 そして、誰かがそれをキャッチするまで呼び出しスタックをバブルアップします。このケースを処理する構造は次のとおりです。 try / catch。

エラーのスロー: throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw は、現在の関数を直ちに中断します。

キャッチ: try / catch

JS
try {
  const r = dividi(10, 0);
  console.log('ok', r);
} catch (err) {
  console.log('errore:', err.message); // 'errore: Divisione per zero'
}

// Il programma continua qui, anche se c'è stato un errore.

try 内のすべてが実行されます。 (throw 経由、または何らかの操作によってエラーがスローされた場合) 失敗した場合)、制御は catch ブロックにジャンプします。 catch (...) の後の変数がエラーを受け取ります。

finally (オプション)

エラーがあるかどうかに関係なく、常に実行されるコード。リソースを閉じるのに役立ちます。

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

いつ使用するか (いつ使用しないか)

  • はい: I/O 操作 (信頼できない入力に対する JSON.parse、fetch、ディスク アクセス)、変換 失敗する可能性があります。
  • おそらくそうではない: 通常のフローの場合。入力が無効である可能性があることがわかっている場合は、それを確認することをお勧めします if を使用すると、投げてキャッチするよりも便利です。
JS
// Tipico: parsing JSON difensivo
function parseJsonSafe(text) {
  try {
    return { ok: true, value: JSON.parse(text) };
  } catch (err) {
    return { ok: false, error: err.message };
  }
}

parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }

試してみてください

運動#js.m5.l4.e1
試行回数: 0読み込み中…

`safeDivide(a, b)` を定義します。 b が 0 の場合は、「Divisione per zero」というメッセージを含むエラーをスローし、それ以外の場合は a/b を返します。

エディターを読み込み中…
ヒントを表示

if (b === 0) throw new Error('...');次に a / b を返します。

3 回の試行後に解決策が利用可能になります

復習演習

運動#js.m5.l4.e2
試行回数: 0読み込み中…

`parseJsonSafe(text)` を定義します。テキストが有効な JSON の場合は { ok: true, value: <object> } を返し、それ以外の場合は { ok: false } を返します。 JSON.parse で try/catch を使用します。

エディターを読み込み中…
ヒントを表示

JSON.parse を try でラップします。 catch では { ok: false } が返されます。

3 回の試行後に解決策が利用可能になります