1. ホーム
  2. ジャバスクリプト

[解決済み】JSでtypeofエラーをチェックする。

2022-04-05 17:02:25

質問

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

例えば、こんなのは無効です。

typeof err === 'error'

というのは、(文字列の形で)可能な型は6つしかないからです。

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

数値、文字列、ブーリアン、オブジェクト、関数、および未定義です。

MSDN

しかし、こんな単純な使用例があったらどうでしょう。

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 演算子は、何か役に立ちましたか?

解決方法は?

を使用することができます。 instanceof 演算子を使うことができます(ただし、以下の注意点を参照してください!)。

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

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

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

しかし、ダックタイピングは、非エラーオブジェクトが、以下のものを含む場合、誤検出を引き起こす可能性があります。 stackmessage プロパティを使用します。