94

Javascriptでキーワードを使って何でもスローできるのでthrow、エラーメッセージ文字列を直接スローすることはできませんか?

誰かがこれのキャッチを知っていますか?

これにいくつかの背景を追加しましょう。JavaScriptの世界では、try-catchメカニズムを使用するのではなく、パラメーターチェックに依存することが非常に多いため、。で致命的なエラーのみをスローするのが理にかなっていthrowます。それでも、いくつかのシステムエラーをキャッチできるようにするには、自分のエラーに別のクラスを使用する必要があり、Errorのサブクラスを作成する代わりに、Stringを使用する必要があると思います。

4

5 に答える 5

69

任意の値をスローすることは問題Errorありませんが、通常、インスタンスまたはそのサブクラスの 1 つ以外のものをスローするのは不適切な形式と見なされます。これにはいくつかの理由があります。

  1. キャッチ コードは、スローされたオブジェクトが s に表示される通常のmessagestacktrace、およびnameプロパティを持っていることを期待する場合がありますError
  2. スタックトレースがないと、特にキャッチされない例外や未処理の拒否の場合に、デバッグが問題になります。たとえば、「Uncaught [Object object]」エラーのデバッグは特に苦痛です。
于 2012-07-16T21:10:26.620 に答える
60

はい、他の値を投げることができますが、それは良い習慣ではありません

誰もこれで何か知っていますか?

文字列はエラー オブジェクトではなく、有用なデバッグ情報を伝えません。Devtools は、エラーが作成されたファイルや行、そのthrow場所のスタック トレースなど、オブジェクトのプロパティとして利用できるものに依存していErrorます。

プリミティブ文字列値をスローすることを考えるときはいつでも、new Error("<the string>")代わりに a をスローします。

于 2014-12-16T09:29:40.453 に答える
22

メッセージでエラーをスローする可能性があります。

try {
    throw new Error("This is an error");
} catch (e) {
    alert(e.message); // This is an error
}

しかし、実際には文字列を投げることができます。

try {
    throw "This is an error";
} catch (e) {
    alert(e); // This is an error
}
于 2012-07-16T09:59:11.020 に答える