JS で typeof エラーを確認する 質問する

JS で typeof エラーを確認する 質問する

JS では、関数に渡された引数が実際に 'error' 型なのか、それとも Error のインスタンスなのかを確認することはできないようです。

たとえば、これは無効です:

typeof err === 'error'

可能な型は 6 つだけ (文字列形式) であるため:

typeof 演算子は、型情報を文字列として返します。typeof返される値は 6 つあります。

「数値」、「文字列」、「ブール値」、「オブジェクト」、「関数」、および「未定義」。

マイクロソフト

しかし、次のような単純なユースケースの場合はどうなるでしょうか。

function errorHandler(err) {

    if (typeof err === 'error') {
        throw err;
    }
    else {
        console.error('Unexpectedly, no error was passed to error handler. But here is the message:',err);
    }
}

では、引数が Error のインスタンスであるかどうかを判断する最良の方法は何でしょうか?

instanceofオペレーターは何かお手伝いできますか?

ベストアンサー1

あなたはinstanceof演算子 (ただし、以下の注意事項を参照してください)。

var myError = new Error('foo');
myError instanceof Error // true
var myString = "Whatever";
myString instanceof Error // false

チェックが行われている場所とは異なるウィンドウ/フレーム/iframe でエラーがスローされた場合、上記は機能しません。その場合、チェックはオブジェクトinstanceof Errorに対しても false を返しますError。その場合、最も簡単な方法はダックタイピングです。

if (myError && myError.stack && myError.message) {
  // it's an error, probably
}

stackただし、プロパティを含むエラーのないオブジェクトがある場合、ダックタイピングによって誤検知が発生する可能性がありますmessage

おすすめ記事