JavaScriptにおける例外のスロー

JSONプロダクトのタスクにおける catch ブロックを見てみましょう:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('不正なプロダクトJSON');
  } else if (error.name == 'ProductCostError') {
    alert('プロダクトに価格または数量がありません');
  }
}

ご覧の通り、我々は予定していた2つの例外をキャッチし、 それに対して何らかの対応をしています。 しかし、我々が想定していない別のタイプの例外が 発生した場合はどうなるでしょうか?この場合、 それはやはり catch ブロックに入りますが、 他のタイプの例外は我々のどのif文にも該当しないため、 何の対応も行われません。

何の対応も行われないと言うとき、それは文字通り、 何も起きないという意味です:コンソールにエラーが 表示されることすらありません。 我々のコードはただ黙って動作しないのです。

したがって、次のルールが存在します:あなたのコードは、 対処方法を知っている例外のみをキャッチすべきです。 例外が未知のものであれば、throw を使って それを スロー(再スロー) する必要があります。 この場合、上位のより知識のある部分がそれをキャッチするか、 または例外がコンソールにエラーとして表示されます。

コードを修正しましょう:

javascriptcatch (error) {
  if (error.name == 'SyntaxError') {
    alert('不正なプロダクトJSON');
  } else if (error.name == 'ProductCostError') {
    alert('プロダクトに価格または数量がありません');
  } else {
    throw error; // 例外をさらにスローする
  }
}
Задание 1

次のコードが与えられています:

javascripttry {
  let arr = JSON.parse(json);

  for (let i = 0; i < arr.length; i++) {
    localStorage.setItem(i, arr[i]);
  }
} catch (error) {
  if (error.name == 'QuotaExceededError') {
    alert('ストレージの空き容量が不足しています');
  }
  
  if (error.name == 'SyntaxError') {
    alert('不正なJSON');
  }
}

このコードの何が問題でしょうか?より適切なものに修正してください。