⊗jsSpExcPrb 150 of 294 menu

JavaScriptにおける例外のスロー

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

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

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

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

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

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

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

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

try { 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'); } }

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

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否