W JS nie wydaje się możliwe sprawdzenie, czy argument przekazany do funkcji jest rzeczywiście typu „błąd”, czy też wystąpieniem błędu.
Na przykład to nie jest prawidłowe:
typeof err === 'error'
ponieważ istnieje tylko 6 możliwych typów (w postaci ciągów):
Operator typeof zwraca informacje o typie w postaci ciągu. Istnieje sześć możliwych wartości, które typeofzwracają:
„liczba”, „ciąg znaków”, „wartość logiczna”, „obiekt”, „funkcja” i „nieokreślona”.
Ale co, jeśli mam taki prosty przypadek użycia:
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);
}
}
więc jaki jest najlepszy sposób określenia, czy argument jest wystąpieniem błędu?
czy instanceofoperator ma jakąś pomoc?
err(powiedzmy) ramkę iframe, a następnie przekażesz ją do okna nadrzędnego w celu przekazania, otrzymasz (err instanceof Error) === false. Dzieje się tak, ponieważ element iframe i jego okno nadrzędne mają różne, różne Errorprototypy obiektów. Podobnie obiekt taki jak obj = {};will, przekazany do funkcji działającej w innym oknie, yeild (obj instanceof Object)===false. (Co gorsza, w IE, jeśli zachowasz odniesienie do obj po zniszczeniu lub nawigacji w jego oknie, próba wywołania prototypu obiektu fns, takiego jak, obj.hasOwnProperty()spowoduje wyświetlenie błędów!)
catch((err)=>{if (err === ENOENT)zwraca ENOENT is not definedbłąd?
err instanceof Error