JSでは、関数に渡された引数が実際に「エラー」タイプであるか、エラーのインスタンスであるかどうかを確認することは不可能のようです。
たとえば、これは無効です。
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);
}
}
では、引数がエラーのインスタンスであるかどうかを判断する最良の方法は何ですか?
instanceofヘルプのオペレーターは何ですか?
erriframeを(たとえば)スローしたが、それを親ウィンドウに渡して処理すると、が表示されることがわかると思います(err instanceof Error) === false。これは、iframeとその親ウィンドウに異なる、異なるErrorオブジェクトプロトタイプがあるためです。同様に、obj = {};willのようなオブジェクトは、別のウィンドウで実行されている関数yeildに渡され(obj instanceof Object)===falseます。(最悪でも、IEでは、ウィンドウが破棄またはナビゲートされた後もobjへの参照を保持している場合、オブジェクトプロトタイプfnsを呼び出そうとするとobj.hasOwnProperty()エラーがスローされます!)
catch((err)=>{if (err === ENOENT)返しENOENT is not definedますか?
err instanceof Error