`throw new Error` と `throw someObject` の違いは何ですか? 質問する

`throw new Error` と `throw someObject` の違いは何ですか? 質問する

コードのどのインスタンスでも意図的にスローされるカスタム エラーをキャッチする共通エラー ハンドラーを記述したいと思います。

throw new Error('sample')次のコードのようにすると

try {
    throw new Error({'hehe':'haha'});
    // throw new Error('hehe');
} catch(e) {
    alert(e);
    console.log(e);
}

Firefox ではログが と表示されError: [object Object]、オブジェクトを解析できませんでした。

2 番目のthrowログには次のように表示されます。Error: hehe

私がそうしたとき

try {
    throw ({'hehe':'haha'});
} catch(e) {
    alert(e);
    console.log(e);
}

コンソールには次のように表示され、Object { hehe="haha"}エラー プロパティにアクセスできました。

違いはなんですか?

コードに表示されているような違いはありますか? 文字列は文字列として渡され、オブジェクトはオブジェクトとして渡されますが、構文は異なりますか?

エラー オブジェクトをスローする方法はまだ調べていません... 文字列をスローすることしか行っていませんでした。

上記の 2 つの方法以外に方法はありますか?

ベストアンサー1

JavaScript における「throw new Error」と「throw someObject」の違いは、throw new Error は渡されたエラーを次の形式でラップすることです。

{ name: 'エラー'、 message: 'コンストラクタに渡した文字列' }

throw someObject はオブジェクトをそのままスローし、try ブロックからのそれ以上のコード実行を許可しません。つまり、throw new Error と同じです。

ここに良い説明がありますError オブジェクトと独自のエラーのスロー

エラーオブジェクト

エラーが発生した場合、そこから何を抽出できるのでしょうか? すべてのブラウザの Error オブジェクトは、次の 2 つのプロパティをサポートしています。

  • name: エラーの名前、より具体的には、エラーが属するコンストラクター関数の名前。

  • メッセージ: エラーの説明。この説明はブラウザによって異なります。

name プロパティによって返される可能性のある値は 6 つあり、前述のように、これらはエラーのコンストラクターの名前に対応しています。これらは次のとおりです。

Error Name          Description

EvalError           An error in the eval() function has occurred.

RangeError          Out of range number value has occurred.

ReferenceError      An illegal reference has occurred.

SyntaxError         A syntax error within code inside the eval() function has occurred.
                    All other syntax errors are not caught by try/catch/finally, and will
                    trigger the default browser error message associated with the error. 
                    To catch actual syntax errors, you may use the onerror event.

TypeError           An error in the expected variable type has occurred.

URIError            An error when encoding or decoding the URI has occurred 
                   (ie: when calling encodeURI()).

独自のエラー(例外)をスローする

制御が try ブロックから catch ブロックに自動的に移行される前に 6 種類のエラーのいずれかが発生するのを待つ代わりに、独自の例外を明示的にスローして、必要に応じて強制的に移行させることもできます。これは、エラーとは何か、いつ制御を catch に移行するかという独自の定義を作成するのに最適です。

おすすめ記事