In JS non sembra possibile verificare se un argomento passato a una funzione è in realtà del tipo "errore" o un'istanza di errore.
Ad esempio, questo non è valido:
typeof err === 'error'
poiché ci sono solo 6 tipi possibili (sotto forma di stringhe):
L'operatore typeof restituisce le informazioni sul tipo come stringa. Esistono sei valori possibili che typeofrestituiscono:
"number", "string", "boolean", "object", "function" e "undefined".
E se avessi un semplice caso d'uso come questo:
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);
}
}
quindi qual è il modo migliore per determinare se un argomento è un'istanza di errore?
è l' instanceofoperatore di qualche aiuto?
err(diciamo) un iframe, ma poi lo passi alla finestra padre per la consegna, otterrai (err instanceof Error) === false. Questo perché iframe e la sua finestra principale hanno Errorprototipi di oggetti distinti e diversi . Allo stesso modo un oggetto come obj = {};volontà, quando viene passato a una funzione in esecuzione in una finestra diversa, genera (obj instanceof Object)===false. (Ancora peggio, in IE, se si mantiene un riferimento a obj dopo che la sua finestra è stata distrutta o navigata, tentando di chiamare il prototipo di oggetto fn come se obj.hasOwnProperty()si generassero errori!)
catch((err)=>{if (err === ENOENT)restituisce ENOENT is not definederrore?
err instanceof Error